1

Может ли код VBA в электронной таблице Excel вызывать макрокоманду другого файла рабочей книги XLSM?

У меня есть локальный XLSM, который должен вызывать метод в другом файле XLSM, как это можно сделать?

3 ответа3

1

Вы должны использовать кодовое имя листа, а не имя.

В изображении, которым я делюсь, вы должны использовать "Sheet1", а не "testSheet"

Нажмите, чтобы увидеть

1

Открыть файл книги, закрыть, если уже открыт

codeWorkBookPath = "Directory\"
codeWorkBookName = "file.xlsm"
codeWorkBookFullPathName = UCase(Trim(codeWorkBookPath)) &         
UCase(Trim(codeWorkBookName))
codeWorkbookAlreadyOpen = CommonWorkbook.isWbOpen(codeWorkBookName)
If Not codeWorkbookAlreadyOpen Then
 Workbooks.Open Filename:=codeWorkBookFullPathName, UpdateLinks:=False, 
 ReadOnly:=True
End If

активировать стартовую таблицу

Workbooks(startWorkBook).Activate
Sheets(startWorkSheet).Activate

Запустите macroName

argString = "'" & Trim(codeWorkBookName) & "'!" & Trim(macroName)
APPLICATION.Run argString
0

Опция 1:

Если обе книги - «Исходная и целевая» - открыты, вы можете воспользоваться любым из следующих.

Вы можете динамически назначать переменную Workbook & Macro name, тогда вам нужно написать этот код.

Application.Run ("'" & workbookname & "'!macroname")

NB Если workbookname переменная содержит путь к File Path, Workbook & Sheet Name & macroname содержит Macro's Name

Ниже прямая команда:

Application.Run ("'Test7A.xlsm'!Sheet1.Rangetest")

Вариант 2:

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

Sub myMacro()
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks("Test7A.xlsm")
    On Error GoTo 0
    If wb Is Nothing Then Set wb = Workbooks.Open(ThisWorkbook.Path & "\Test7A.xlsm")
    Run "Test7A.xlsm!Sheet1.RangeTest"
    wb.Close False
    Set wb = Nothing
End Sub

Где Test7A.xlsm - это имя книги. Sheet1 - это имя листа, а RangeTest - это макрос, из которого вы звоните.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .