Присвоение массива из диапазона напрямую приводит к массиву 2D
, а не 1D
.Чтобы преодолеть это, вы можете ссылаться на него, например, All_Submitted_Dates(DateCounter, 1)
или Transpose
ваш ввод.
Если ваши входные данные хранятся в одном столбце, вам просто нужно Transpose
один раз
With Application
All_Submitted_Dates = .Transpose(Range("K2", Range("K1").End(xlDown)))
End With
Однако, если ваши данные находятся в нескольких столбцах, вам потребуется удвоить Transpose
это, чтобы получить массив 1D
With Application
All_Submitted_Dates = .Transpose(.Transpose(Range("K2", Range("K1").End(xlDown))))
End With
Затем вы можете ссылаться на ваш массив, как вы сделали востальная часть вашего кода
Обновление после комментариев Я думаю, что ваша проблема связана с комбинацией вещей (однако это может быть просто из-за того, что вы не включилиинформация в вашем вопросе).Можете ли вы взглянуть на код ниже.
Я объявил All_Submitted_Dates
и All_WorkWeek
как варианты.Затем я установил All_Submitted_Dates
с явной ссылкой на лист (ваш запрос взял бы из ActiveSheet
, возможно, вызывающего ошибки), а также Transpos[e]
из значений, чтобы код работал с массивом 1D
.Затем я ReDim
отредактировал массив All_WorkWeek
, чтобы его размер совпадал с All_Submitted_Dates
.Затем я использовал вашу петлю For
, как вы написали выше.Тем не менее, я бы предложил использовать Lbound(All_Submitted_Dates)
вместо 1, хотя это не должно иметь большого значения, но это хорошая практика.
Вам нужно будет обновить блок With Sheet1
со ссылкой на свой лист, где вашВходные данные хранятся, однако, это в моих тестах работает как задумано.
Dim All_Submitted_Dates As Variant, All_WorkWeek As Variant
Dim DateCounter As Long
' Update with your sheet reference
With Sheet1
All_Submitted_Dates = Application.Transpose(.Range(.Range("K2"), .Cells(.Rows.Count, "K").End(xlUp)))
End With
ReDim All_WorkWeek(LBound(All_Submitted_Dates) To UBound(All_Submitted_Dates))
For DateCounter = 1 To UBound(All_Submitted_Dates)
All_WorkWeek(DateCounter) = WorksheetFunction.WeekNum(All_Submitted_Dates(DateCounter))
Next DateCounter
Проблемы, которые я обнаружил:
- Массив объявляется как
2D
и упоминается как 1D
- Слабый диапазон указывает на то, что код ссылалсяв
ActiveSheet
возможно, что приведет к ошибкам - Выбор диапазона с использованием
End(xlDown)
, но начиная с первой ячейки, в результате чего Range будет выбирать только одну ячейку (следовательно, возможно, по умолчанию будет использоваться значение ячейки вместо создания массива) All_WorkWeek
возможно, неправильно инициализирован, чтобы не принимать значения