2010-09-23 4 views
0

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

Как получить доступ к общественной константу, определенную в другой книге 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") 

Так что, называя рутинный работает, но доступ к открытому постоянная не.

Любые идеи, что я мог бы попробовать дальше?

ответ

2

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

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

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

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

+0

Отличный ответ, спасибо. Да, я также подумал о том, чтобы написать метод обертки в качестве последнего средства. Я думаю, что я пойду с этим обходным решением, поэтому мне не нужно вводить никаких новых ссылок. – Lernkurve

Смежные вопросы