Я пытаюсь выбрать непрерывный диапазон внутри таблицы, определяемой ссылками на переменные с использованием VBA. Я столкнулся с проблемой, где я могу использовать функцию объединения, чтобы выбрать 2 точки, но не могу использовать функцию диапазона для создания непрерывного диапазона.
Для контекста, вот пример кода, который яиспользуя:
For i = 1 to 5
Set colrng = Table2.HeaderRowRange
Set rowrng = Range(Range("B3"), Range("B" & CStr(2 + Table2.DataBodyRange.Rows.Count)))
col = WorksheetFunction.Match(Table1.DataBodyRange(i, 1), colrng, 0)
row = WorksheetFunction.Match(Table1.DataBodyRange(i, 4), rowrng, 0)
Union(Table2.DataBodyRange(row, col), Table2.DataBodyRange(row + 2, col)) = "New Value"
Next
Код на данный момент работает, но в результате получается 2 непересекающиеся ячейки, содержащие «Новое значение», тогда как я бы предпочел, чтобы каждая ячейка между двумя конечными точками и включительно содержала «Новое значение»,Метод, который я использовал в прошлом для менее сложного кода, использует функцию Range, но она здесь не работает и выдает ошибку:
Ошибка времени выполнения '1004':
Ошибка приложения или объекта
Редактировать: Я не думаю, что я был достаточно ясен в своем первоначальном примере, поэтому ниже приведен полный код, который я использую.
Private Sub test()
Dim colrng As Range
Dim rowrng As Range
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim r As Integer
Dim c As Integer
Dim t As Double
Dim Schedule As ListObject
Dim Info As ListObject
Set Schedule = Sheet1.ListObjects("Table1")
Set Info = Sheet2.ListObjects("Table2")
Schedule.DataBodyRange.ClearContents
For i = 1 To Info.DataBodyRange.Rows.Count
t = Info.DataBodyRange(i, 5) - 1
Set colrng = Schedule.HeaderRowRange
Set rowrng = Sheet1.Range(Sheet1.Range("B3"), Sheet1.Range("B" & CStr(2 + Schedule.DataBodyRange.Rows.Count)))
If IsEmpty(Info.DataBodyRange(i, 4)) = False And IsEmpty(Info.DataBodyRange(i, 1)) = False Then
c = Application.Match(Info.DataBodyRange(i, 1), colrng, 0)
r = Application.Match(Info.DataBodyRange(i, 4), rowrng, 0)
Range(Schedule.DataBodyRange(r, c), Schedule.DataBodyRange(r + t, c)) = Info.DataBodyRange(i, 2) & " - " & Info.DataBodyRange(i, 3)
End If
Next
End Sub
Где информация - эта таблица:
И таблица расписаний с желаемым выходом:
На данный момент, используя функцию Union вместо функции Range в последнем ряду перед кодом закрытия, я могугенерировать все желаемые выходные данные, кроме того, что ячейка D8 пуста.