1. ReDim Preserve
Цитирование из справки VBA
Если вы используете ключевое слово Preserve , вы можете изменить размер только последнего измерения массива
... пока вы пытаетесь ReDim Preserve
в первом измерении. Кроме того, ReDim Preserve
является дорогостоящей операцией, и вам следует избегать ее, если она не является абсолютно необходимой, а в вашем случае это не так. Поскольку вы можете определить максимальное количество элементов, которое будет содержать ваш массив, просто ReDim
это один раз вверху вашего кода.
Кроме того, хорошей практикой является явное указание нижних границ вашего массива вместо того, чтобы просто указывать им значения по умолчанию и надеяться на лучшее.
Пример того, как сделать обе эти вещи:
Dim nVal As Long
nVal = WorksheetFunction.CountA(rangeTimeValue.Columns(1))
ReDim outputRange(1 To nVal, 1 To 2)
2. «Вставка» результатов
Я не уверен, что вы имеете в виду здесь, потому что вы нигде ничего не вставляете. Это опечатка, где вы имели в виду pas * s * ing? Или ты имеешь ввиду транспонирование? Я не могу понять, что вы пытаетесь сделать в этой строке с .Transpose
. Я не знаю. Я просто сделаю удар в темноте:
Если вы хотите разместить содержимое вашего массива outputRange
где-нибудь на вашем листе, то вот как вы могли бы это сделать:
Dim rngOutput As Range
Set rngOutput = Sheet1.Range("G12") ' or wherever
rngOutput.Resize(UBound(outputRange, 1), UBound(outputRange, 2)) _
= outputRange
Кстати, outputRange
- довольно ужасное имя для вашего массива. Это не Range
, так что это имя может привести к путанице, и я думаю, что это действительно так для вас. Почему бы не назвать это, например varOutput
вместо этого, поскольку это массив Variant
.