Итак, я не так давно столкнулся с проблемой с массивами в VBA, которую мне удалось исправить.Однако я не могу понять, почему исправление сработало, поскольку логически я говорил VBA точно то же самое.Никто из людей в моем офисе, которые пишут код на VBA, не может ответить на этот вопрос.
Проблема заключается в том, что я хочу взять данные из таблицы, сохранить их в массиве и затем скопировать в другую таблицу.Приведенный ниже код отлично подходит для этого, как и должно быть, поскольку это простая задача, если в таблице не менее 2 строк.Если таблица содержит только 1 строку, она выплевывает:
ошибка несоответствия типов во время выполнения 13
Я прокомментировал исправление в приведенном ниже операторе if, так что вы можете увидетьчто это исправляет.Если в таблице есть одна строка данных и, скажем, 1 столбец, я переименовываю массив как 1,1
для размера.Это должно соответствовать таблице, в которую я хочу скопировать данные, если это также 1 строка и 1 столбец.Тем не менее, это не позволит мне просто сделать MyArray() = new table range
.Я должен конкретно сказать, что если есть 1 строка, то выполните MyArray(nr, 1)
, что для меня то же самое, поскольку массив все равно перенаправляется как nr, 1.
Что мне здесь не хватает?
Option Explicit
Option Base 1
Sub test()
Dim MyArray() As Variant
Dim nr As Integer
nr = Range("Tbl_Test[Data]").Rows.Count
ReDim MyArray(nr, 1)
MyArray() = Range("Tbl_Test[Data]")
'If nr = 1 Then
'MyArray(nr, 1) = Range("Tbl_Test[Data]")
'Else:
'MyArray() = Range("Tbl_Test[Data]")
'End If
Range("Tbl_Test2[Data]") = MyArray()
End Sub