У меня есть модуль, который хранит массив объектов Range, который вызывается в других модулях. Хотя этот модуль функциональный, он неаккуратный, и я хотел бы, чтобы код был легко читаем/редактируем для будущих разработчиков. В идеале это было бы не только легко читать/редактировать, но и быть массивом диапазона (в отличие от варианта массива).VBA Excel Недопустимый ReDim/ожидаемый массив с массивом диапазонов Модуль
Как модуль называется (в идеале было бы «Как Range»):
Sub CallModule()
'...
Dim rangeArray As Variant
'...
rangeArray = RngArr()
'...
Call AnotherModule(rangeArray(count))
End Sub
Текущий модуль:
Public Function RngArr() As Variant
RngArr = Array(Range("'ActivityTracker'!B12"), Range("'ActivityTracker'!H12"), Range("'ActivityTracker'!B26"), Range("'ActivityTracker'!H26"), Range("'ActivityTracker'!B39"), Range("'ActivityTracker'!H39"), Range("'ActivityTracker'!B53"))
End Function
Я получаю пару ошибок при попытке поставить его вместе ,
возвращает 'ожидается массив':
Public Function RngArr() As Range
ReDim RngArr(0 To 6) '<---Expected Array
Set RngArr(0) = Range("'ActivityTracker'!B12")
Set RngArr(1) = Range("'ActivityTracker'!H12")
Set RngArr(2) = Range("'ActivityTracker'!B26")
Set RngArr(3) = Range("'ActivityTracker'!H26")
Set RngArr(4) = Range("'ActivityTracker'!B39")
Set RngArr(5) = Range("'ActivityTracker'!H39")
Set RngArr(6) = Range("'ActivityTracker'!B53")
End Function
возвращает «Invalid ReDim»:
Public Function RngArr() As Variant
ReDim RngArr(0 To 6) As Range '<---Invalid ReDim
Set RngArr(0) = Range("'ActivityTracker'!B12")
Set RngArr(1) = Range("'ActivityTracker'!H12")
Set RngArr(2) = Range("'ActivityTracker'!B26")
Set RngArr(3) = Range("'ActivityTracker'!H26")
Set RngArr(4) = Range("'ActivityTracker'!B39")
Set RngArr(5) = Range("'ActivityTracker'!H39")
Set RngArr(6) = Range("'ActivityTracker'!B53")
End Function
Я не знаю VBA достаточно хорошо, чтобы точно знать, что происходит с этими ошибками, и у меня есть несколько таких модулей, которые должны быть исправлены. Поэтому, если кто-то может дать быстрое объяснение, почему я получаю эти ошибки и как их исправить, я бы очень признателен!
EDIT: Цель этого модуля - предоставить глобальный доступ к местоположениям различных таблиц на листе, поэтому сами места являются важными, а не значениями в ячейках. Но этот массив используется несколько раз в рабочей книге, потому что другие модули нуждаются в доступе к таблицам, чтобы иметь возможность работать правильно. Кроме того, я знаю, что вы можете напрямую ссылаться на таблицы, но в этой конкретной программе есть много случаев, которые сделают ссылку на таблицы по отдельности намного сложнее, чем нужно.
* Это неряшливо, и я хотел бы, чтобы код был легко читаемым/редактируемым для будущих разработчиков. * - заставить его работать по назначению, а затем опубликовать модуль на [codereview.se]. Удачи! –
Вы в конечном итоге пытаетесь иметь дело с объектом [Range object] (https://msdn.microsoft.com/en-us/library/office/ff838238.aspx) или значениями из объекта [Range object] (https://msdn.microsoft.com/en-us/library/office/ff838238.aspx)s? – Jeeped