2015-12-10 6 views
2

У меня есть макрос в книге A, который вызывает макрос в книге B. Я хочу, чтобы макрос в рабочей книге B запускался, а затем я хочу закрыть книгу B. Я продолжаю получать сообщение об ошибке макроса не может быть найдено, что я хочу работать из книги B. Я в этом начинаю, но я провел довольно тщательный поиск и ничего не смог придумать. Вот мой код целиком.Запуск макроса из другой рабочей книги

Public Sub InputDept() 


Dim Cap As Workbook 
Dim Cap2 As String 

On Error Resume Next 
Set Cap = Workbooks("NGD Source File for Net Budget Reporting.xlsx") 
Cap2 = Cap.Name 
On Error GoTo 0 

Dim wb As Workbook 
Dim Cap1 As Variant 

Application.ScreenUpdating = False 
If Cap Is Nothing Then 
Cap1 = Application.GetOpenFilename("Excel Files(*.xl*)," & "*.xl*", 1) 
    If Cap1 = False Then 
    Exit Sub 
    End If 
Set wb = Workbooks.Open(Cap1) 
Cap2 = ActiveWorkbook.Name 
Else 
Workbooks(Cap2).Activate 
End If 


Sheets("Dept Summary").Activate 


Cells.Find(What:="Direct", after:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Offset(1, 0).Select 

Range(Selection, Selection.End(xlDown)).Select 

Dim cRng As Range 
Dim dRng As Range 

Set dRng = Selection 

For Each cRng In dRng 
If cRng.Interior.ThemeColor = xlThemeColorAccent3 Then 


    Dim mCalc As String 
    Dim mSum As Workbook 

    On Error Resume Next 
    Set mSum = Workbooks("Master Calc with Macro.xlsm") 
    mCalc = mSum.Name 
    On Error GoTo 0 

    Application.ScreenUpdating = False 
    If mSum Is Nothing Then 
     mSum1 = Application.GetOpenFilename("Excel Files.xl*),"& "*.xl*", 1) 
    If mSum1 = False Then 
     Exit Sub 
    End If 
     Set wb1 = Workbooks.Open(mSum1) 
     mCalc = ActiveWorkbook.Name 
    Else 
     Workbooks(mCalc).Activate 
    End If 

    cRng.Copy 

    Workbooks(mCalc).Activate 
    Sheets("Data").Select 
    Range("A5").Select 

    Selection.PasteSpecial Paste:=xlPasteValues 
    Sheets("Report").Activate 

    Workbooks(mCalc).Application.Run ("!SummarizeMaster") 

    Sheets("Report").Select 
    ActiveSheet.Copy 
    Cells.Select 
    Cells.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues 
    ActiveWorkbook.SaveAs _ 
     Filename:=Application.ThisWorkbook.Path & "\" & Format(Date -  28, "MMM") & " Files\" & Left(cRng, 7) & ".xlsx" 

    ActiveWorkbook.Close 

    Workbooks(mCalc).Close savechanges:=False 

End If 
Next cRng 



End Sub 
+0

от [это] (HTTP: // stacko verflow.com/questions/24434011/excel-vba-run-macro-open-another-file-run-that-files-macro-save-close), похоже, что вам не нужен '()'? Btw, вы можете использовать 'wb1' вместо' Workbooks (mCalc) '. – findwindow

ответ

6

Эта линия:

Workbooks(mCalc).Application.Run ("!SummarizeMaster") 

необходимо изменить немного. Вы должны включать в себя название книги, даже если она выглядит, как вы определяете правильную книгу с Workbooks(mCalc):

Workbooks(mCalc).Application.Run ("Master Calc with Macro.xlsm!SummarizeMaster") 

Вы можете на самом деле просто сократить его:

Application.Run ("Master Calc with Macro.xlsm!SummarizeMaster") 
+0

Спасибо за ответы. @Stewbob - попробовал это исправление, и теперь я получаю сообщение об ошибке «Run-time erro 1004»: не удается запустить макрос «Master Calc с Macro.xlsm! SummarizeMaster». Макрос может быть недоступен в этой книге или все макросы могут быть отключены – JudeD

+1

Обычно ошибка '1004' указывает на то, что объект не существует или не может быть найден. Возможно, проверка орфографии всего? – Stewbob

+0

Итак, я понял, что вам нужно пространство между именем файла и marco, т. е. Application.Run («Master Calc с Macro.xlsm! SummarizeMaster»). Однако теперь я получаю сообщение об ошибке, в котором говорится, что Excel не может одновременно открыть две книги с таким же именем? – JudeD

0

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

Dim relativePath As String, programFileName As String 
Dim selectedProgramsFiles() As String, programsArrayLastIndex As Byte, I As Byte 

For I = 0 To programsArrayLastIndex 'Loop through all selected programs 
    programFileName = selectedProgramsFiles(I) 
    relativePath = ThisWorkbook.Path & "\" & programFileName 
    Workbooks.Open Filename:=relativePath 

    Application.Run ("'" & relativePath & "'!ModuleName.Main") 

    Workbooks(programFileName).Activate 
    ActiveWorkbook.Close SaveChanges:=False 
Next I 'For I = 0 To programsArrayLastIndex 'Loop through all selected program 
+0

Workbooks.Open .... строка не работает , потому что файл любым способом будет открыт в строке Application.Run –

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