2012-04-04 4 views
14

Я хотел бы знать, если есть способ вызова функции VBA или метод из модуля другой указанной рабочей книги, как это возможно для конкретного листа без использования Application.RunКак вызвать функцию из другой конкретной книги в VBA?

Для листа можно назвать, например, :

ActiveSheet.MyTest() 

если MyTest определен в модуле

листа Но я хотел бы вызвать функцию, которая определена в модуле

Я попытался:

ActiveWorkbook.MyTestModule() 
ActiveWorkbook.VBProject.VBComponents("MyModule").MyTestModule(myArg) 

, которые не работают генерации объекта ошибки не поддерживает этот метод

я мог бы назвать

Application.Run(ActiveWorkbook.name & "!MyTestModule", myArg) 

Но я не уверен в обработке ошибок и Application.Run Я нашел бы уборщика для непосредственного запуска метода

+0

Http: // StackOverflow .com/search? q = application.run +% 5Bexcel% 5D – Fionnuala

+1

Единственные ответы - использовать Application.Run, что я пытаюсь подъязычная. Или я должен предположить, что это невозможно? – Gutti

ответ

18

В книге, с которой вы хотите позвонить (я назову это А), вы могли бы добавить ссылку на книгу, на которую вы хотите позвонить (я назову это B) следующим образом:

  1. В Рабочем, откройте Microsoft Visual Basic для приложений окна (например, нажав Alt + F11).
  2. Выбрать инструменты, ссылки.
  3. В появившемся диалоговом окне «Ссылки» выберите «Обзор».
  4. В появившемся диалоговом окне «Добавить ссылку» выберите «Файлы Microsoft Excel» из окна «Тип файла», выберите файл, который вы хотите вызвать (B), и выберите «Открыть».
  5. Выберите «ОК», чтобы закрыть диалоговое окно «Ссылки».

В файле A вы должны иметь возможность вызывать общедоступные функции уровня модуля в файле B, как если бы они были в файле A. Чтобы разрешить конфликты именования, вы можете префиксные вызовы с помощью имени «Project Name» для файл B, как указано на вкладке «Общие» диалогового окна «Свойства проекта» (доступно через команду «Свойства» в меню Microsoft Visual Basic для приложений »). Например, если «Имя проекта» для файла B «VBAProjectB», вы можете вызвать функцию F из файла A, используя синтаксис VBAProjectB.F.

+1

Примечание: для этого не используйте «VBAProject» в качестве имени, иначе он будет конфликтовать. – Envite

-2

Предполагая, что у вас есть 2 книги «Лист1» и «Лист2».

ОБЩЕСТВЕННОЕ метод "Лист2" называется DisplayMessage.

В "Лист1" вы можете сделать это:

Public Sub SetParametersInSheet2(sParam As String) 
With Sheets("Sheet2") 
    .Range("B3").Value = sParam 'range in Sheet2 

    ' --- calling function from another worksheet 
    .DisplayMessage "from here!" 
End With 

End Sub

метод в "Лист2":

Public Sub DisplayMessage(sMess As String) 
    Dim dCurrent As Date 
    Dim sFormattedMess As String 
    sFormattedMess = FormatDateTime(Now, vbLongTime) & ": " & sMess 
    Range("I2").Value = sFormattedMess 

End Sub

+4

рабочая книга не совпадает с рабочим листом – himura

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