16

Вопрос по excel, vba – Как вызвать функцию из другой конкретной книги в VBA?

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

Для рабочего листа я могу назвать, например:

ActiveSheet.MyTest() 

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

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

Я старался :

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

который не работает, генерируя ошибку Объект не поддерживает этот метод

Я мог позвонить

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

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

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

от Gutti

stackoverflow.com/search?q=application.run+%5Bexcel%5D

от Fionnuala
3 ответа
0

Кстати

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

' In workbook ABC, project name Library

Public Type Book_Data
   Title As String
   Pub_Date As Date
   Pub_City As String
End Type

' In workbook DEF (after a ref to Library)
Dim Book_Info As Library.Book_Data

Book_Info.Title = "War and Peace"
Debug.Print Book_Info.Title
21

В книге

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

In workbook A, open the Microsoft Visual Basic for Applications window (for example, by pressing Alt+F11). Select Tools, References. In the References dialog that appears, choose Browse. In the Add Reference dialog that appears, choose Microsoft Excel Files from the Files of type box, select the file that you want to call (B), and choose Open. Choose OK to close the References dialog.

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

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

от 
-2

Предполагая, что у вас есть две книги & quot

Sheet1 & quot; и «Sheet2».

PUBLIC метод в "Sheet2" называетсяDisplayMessage.

In & quot; Sheet1 & quot; вы можете сделать это:

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

Способ в "Sheet2":

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

рабочая книга не совпадает с рабочей таблицей

от 

Похожие вопросы