2015-01-20 2 views
0

Пожалуйста, ваша помощь со следующими:Вызов макроса, имя которого в тексте ячейки

  1. нужно вызвать макрос, имя которого переменная и находится в ячейке С5 Лист1 из Workbook1.
  2. Мне нужно запустить этот макрос в другой книге, скажем, Workbook2.

код, который у меня есть (в Workbook1) до сих пор является:

Public Sub RS() 
    'Setting source worksheet and workbook where the macros are saved 
    Dim ws1 As Worksheet 
    Dim wb1 As Workbook 
    Set wb1 = ActiveWorkbook 
    Set ws1 = ActiveWorkbook.ActiveSheet 

    'Defining the cell that contains the name of the chosen macro to be run 
    Dim Macro1 As String 
    Macro1 = Range("C5").Value 

    'Selecting target workbook 
    Workbooks("Workbook2").Activate 
    ActiveSheet.Select 
    Dim ws2 As Worksheet 
    Dim wb2 As Workbook 
    Set wb2 = ActiveWorkbook 
    Set ws2 = ActiveWorkbook.ActiveSheet 

    'Running in Workbook2, the macro selected in workbook1 
    Call Macro1 
End Sub 

Проблема заключается в том, что Macro1 не была признана. Я также пытался использовать функцию CallByName, и Application.Run Macro1, но не повезло. Скажите, пожалуйста, что мне не хватает или что я должен изменить.

+1

Я настоятельно рекомендую [Избежание Использование '' Select', Activate' и 'ActiveBook/Sheet'] (HTTP : //stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Chrismas007

ответ

0

Заменить строку

Call Macro1 

с этим:

Application.Run "'" & wb2.Name & "'!VBAProject." & ws2.CodeName & "." & Macro1 

Ваш код подразумевает "Macro1" в модуле кода СЗ2 в. Если он находится в другом модуле книги «wb2», замените «ws2.CodeName» выше на кодовое имя этого модуля.

второго обновления на основе информации от Flavinho .The codeline становится этим:

'Application.Run "Workbook1.xlsm!VBAProject.Module3.ts1" 
    Application.Run "Workbook1.xlsm!VBAProject.Module3." & ts1 
+0

Спасибо, L42, и Джин Скуратовский за ваши ответы! Я пошел с: Application.Run «Workbook1.xlsm!» & "Module3." & ts1 , но я получил следующую ошибку: «Ошибка времени выполнения« 1004 »: не удается запустить макрос ... Макрос может быть недоступен в этой книге или все макросы могут быть отключены». Какая проблема сейчас? Большое спасибо! – Flavinho

+0

Это слова ... Пожалуйста, укажите код: –

+0

Просьба проигнорировать вышеизложенное :( –

0

Чтобы вызвать макрос из другой книги, вам нужно включить имя этой книги в первый аргумент Application.Run Method's. Попробуйте:

Application.Run "WBNameThatContainsTheMacro.xlsm!" & Range("C5").Value 

Если у вас есть несколько модулей в этой книге, вы можете быть явным, а также:

Application.Run "WBNameThatContainsTheMacro.xlsm!" & "Module1." & Range("C5").Value 

Где Module1 это имя модуля. Обратите внимание на точку, которая разделяет имя модуля и имя макроса. Это то, что вы пытаетесь? НТН.

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