Когда вы подсчитываете количество строк, вы ссылаетесь на активный лист, и, возможно, это не тот лист, на который вы хотите записать данные.
Попробуйте что-то вроде
Dim x as long
With Sheets("Sheet2")
row_number = .Cells(.Rows.Count, 1).End(xlUp).Row)
if row_number > 1 then row_number = row_number + 1
end With
With Sheets("Sheet2").QueryTables.Add("TEXT;" + vaArray(i), _
Destination:=Sheets("Sheet2").Range("$A$" & row_number))
Обновление : добавьте единицу к row_number, иначе диапазоны будут перекрываться, и, поскольку QueryTable может не перекрываться, Excel перемещает их.
И да, вы можете использовать число для переменной rowcount, вам просто нужно изменить конкатенацию строк с +
на &
.Оператор +
работает для объединения только в том случае, если обе стороны являются строками, а &
выполняет неявное преобразование в строку для всех типов данных.