Можно ли загрузить код VBA из файла, расположенного в сетевой папке? - PullRequest
1 голос
/ 04 октября 2019

У меня есть файл .vba, расположенный в сетевой папке, назовем его helloworld.vba, внутри этого файла у меня есть подфункция HelloFromTheOtherSide().

Я пытаюсь программно загрузить этот файл таким образом, чтобы я мог выполнять функции HelloFromTheOtherSide() в своем экземпляре Excel.

Представьте, что это содержание для простоты:

Sub HelloFromTheOtherSide()
MsgBox ("hello there!")
End Sub

Я пытался следовать этим инструкциям о том, как динамически добавлять и запускать макрос VBA из Visual Basic , но это не то, что я пытаюсь сделать здесь, как хочумогу запустить вызов HelloFromTheOtherSide().

Я пытаюсь понять, возможно ли программно загрузить .vba из папки в экземпляр Excel таким образом, чтобы я мог запускать функции в своем экземпляре.

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

1 Ответ

1 голос
/ 04 октября 2019

Вы можете использовать VBA или VBScript для вызова Function или Sub из другого Workbook:

VBA

Sub callExternalFunction()
    Dim xlApp As Object
    Dim xlBook As Object

    'Define Excel App
    Set xlApp = CreateObject("Excel.Application")
    'Open Workbook
    Set xlBook = xlApp.Workbooks.Open("\\server\my\path\to\My library.xlsm", 0, True)

    'Call my Sub, with eventual parameters (if you don't have any, just call the Routine)
    xlApp.Run "Myfunction", "param_1", "param_2"

    'Quit and clean
    xlApp.Quit
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

VBScript

Sub ExcelMacroExample() 
    Dim xlApp
    Dim xlBook

    'Define Excel App
    Set xlApp = CreateObject("Excel.Application")
    'Open Workbook
    Set xlBook = xlApp.Workbooks.Open("R:\my\network\path\My Workbook.xlsm", 0, True) 

    'Call my Sub, with eventual parameters (if you don't have any, just call the Routine)
    xlApp.Run "myRoutine"

    'Quit and clean
    xlApp.Quit

    Set xlBook = Nothing 
    Set xlApp = Nothing 

End Sub

Редактировать

Вы можете пропустить инициализацию приложения Excel и напрямую вызвать нужный макрос с помощью этой команды (благодаря @TimWilliams) :

Application.Run "'MyBook.xls'!MyMacroName"

Примечание : Как вы можете видеть, они очень похожи. Оба кода проверены и работают в моем Excel.

Надеюсь, это поможет.

...