Как получить доступ к константе, определенной в другой книге Excel? - PullRequest
0 голосов
/ 23 сентября 2010

Вопрос

Как получить доступ к общедоступной константе, определенной в другой книге Excel?

Настройка

Workbook.xls

Мой код VBA выполняется в текущей книге Excel под названием «MyWorkbook.xls».В нем есть некоторый код VBA, который читает имя файла - в данном случае «OtherWorkbook.xls» - из ячейки «A1». Затем код должен прочитать константу, определенную в этой другой книге, и записать ее в ячейку «A2».Вот как выглядит мой код:

Sub GetValueFromOtherWorkbook()
    otherWorkbook = Range("A1").Value  ' Value = "OtherWorkbook.xls"

    Dim returnedValue As String

    ' Idea 1: Doesn't work
    Set returnedValue = OtherWorkbook.xls!Module1.MY_CONSTANT

    ' Idea 2: Doesn't work either
    Set returnedValue = Application.Run(otherWorkbook & "!Module1.MY_CONSTANT")

    Range("A2").Value = returnedValue ' MY_CONSTANT = "testValue"
End Sub

OtherWorkbook.xls

Вторая книга Excel называется "OtherWorkbook.xls", как упоминалось выше.модуль VBA с именем Module1. Module1 определяет открытую константу. Код выглядит следующим образом:

Public Const MY_CONSTANT As String = "testValue"

Проблема

Код из MyWorkbook.xls не запускается,он возвращает следующую ошибку

Ошибка времени выполнения '424'

Требуется объект

Я не совсем знаю, что с ним делать, даже после прочтения справочной документации.В другом контексте мне удалось вызвать подпрограмму в другой книге с таким кодом:

otherWorkbookName = "OtherWorkbook.xls"
Application.Run (otherWorkbookName & "!Module1.SomeRoutine")

Итак, вызов подпрограммы работает, но доступ к общедоступной константе не дает.

Есть идеи, чтоЯ мог бы попробовать дальше?

1 Ответ

2 голосов
/ 23 сентября 2010

Модуль кода не является объектом, к которому можно получить доступ как к рабочему листу.

Вы можете обращаться к нему и манипулировать им, но для этого вам нужно обратиться к библиотеке Microsoft Visual Basic for Applications Extensibility и разрешить доступ к проекту VBA (Инструменты - Параметры - Безопасность - Безопасность макросов - Доверенные издатели - Доверительный доступ к проекту VBA ), после чего вы можете использовать свойство Workbook.VBProject второй книги.

Тебе не нужно это делать. Вместо этого вы можете создать ссылку на другую книгу: в VBA IDE перейдите в Инструменты - Ссылки, нажмите Browse и найдите свою книгу с константой.

Если это нехорошо, вы можете создать метод в этой книге, который будет возвращать только значение константы, и вызывать его, как вы продемонстрировали.

...