У меня есть 10 XLS, каждая из которых содержит несколько сотен строк VBA, которые делают то же самое. Я хочу переместить этот общий код в 11-й XLS, а остальные 10 вызовут код в 11-м XLS. Общий код должен иметь доступ ко всем данным и рабочим листам в вызывающем XLS. Это последнее требование, похоже, не рассматривается другими ответами на этот вопрос на SO. Могу ли я передавать рабочие таблицы XLS в качестве параметра или что-то подобное?Excel VBA - использовать модуль в книге B для обновления данных в книге A
3
A
ответ
7
Вместо того чтобы помещать это во вторичный файл XLS, я бы рекомендовал создать XLA-файл (Excel Add In).
Это точный сценарий, для которого был предназначен XLA. XLA будет работать так, как вы планируете в этом случае.
Подробнее о создании XLA см. this page.
3
Да, вы можете передать ссылки на рабочие книги, рабочие листы, диапазоны, и т.д. в качестве параметров любой функции:
Public Sub CallMe(ByVal oWorkbook as Workbook)
Dim oWorksheet as Worksheet
Set oWorksheet = oWorkbook.Worksheets(1)
' Do stuff...
End Sub
Обратите внимание, что вы, возможно, придется заново писать много кода, копирования из 10 книг, так как они будут полны неявных ссылок на «эту» рабочую книгу, например Worksheets(1)
и т. д. Как и в приведенном выше примере, теперь вам нужно сказать oWorkbook.Workbooks(1)
.