2015-12-10 109 views
2

我在工作簿中的宏調用中的工作簿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 verfusion.com/questions/24434011/excel-vba-run-macro-open-another-file-run-that-files-macro-save-close),看起來像你不需要'()'?順便說一句,你可以使用'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 - 嘗試此修復,現在我得到一個錯誤,指出「運行時錯誤'1004':無法運行宏'Master Calc with Macro.xlsm!SummarizeMaster'。宏可能無法在此工作簿或所有宏可能被禁用。 – JudeD

+1

通常,'1004'錯誤指示對象不存在或無法找到。也許檢查所有的拼寫? – Stewbob

+0

所以,我想通了,你所需要的文件名之間的空間和馬克,也就是Application.Run(「Master Calc with 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 .... line is unn因爲文件以任何方式將在Application.Run行中打開 –

相關問題