Perché gestisci l'oggetto ShXL dentro il ciclo? Perché distruggi gli oggetti dentro il ciclo?
FUORI dal ciclo, PRIMA del suo inizio, devi creare l'oggetto shXL
Dim shXL As Excel.Worksheet
shXL = wbXl.ActiveSheet
e la distruzione dei riferimenti va fatta FUORI AL TERMINE del ciclo in cui li stai utilizzando.