2017-08-10 132 views
0

我试图在几个相同的工作簿中运行一个宏,然后将这些工作簿的第一个工作表合并到一个新的工作簿中。合并部分的工作得益于互联网,但我似乎没有把“运行宏”部分放下。这里是我到目前为止的代码:在关闭的excel工作簿中运行宏并将结果合并到一个新的工作簿中

Sub MergeSelectedWorkbooks() 
Dim SummarySheet As Worksheet 
Dim FolderPath As String 
Dim SelectedFiles() As Variant 
Dim NRow As Long 
Dim FileName As String 
Dim NFile As Long 
Dim WorkBk As Workbook 
Dim SourceRange As Range 
Dim DestRange As Range 


Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1) 
FolderPath = "..." 
ChDrive FolderPath 
ChDir FolderPath 

SelectedFiles = Application.GetOpenFilename(_ 
    filefilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True) 

NRow = 1 
For NFile = LBound(SelectedFiles) To UBound(SelectedFiles) 
    ' Set FileName to be the current workbook file name to open. 
    FileName = SelectedFiles(NFile) 

    Set WorkBk = Workbooks.Open(FileName) 
    Run "Détaildesmlh_Bouton1_Cliquer" #this is what doesn't work 

    SummarySheet.Range("A" & NRow).Value = FileName 
    Set SourceRange = WorkBk.Worksheets(1).Range("A1:G19") 
    Set DestRange = SummarySheet.Range("B" & NRow) 
    Set DestRange = DestRange.Resize(SourceRange.Rows.Count, _ 
     SourceRange.Columns.Count) 
    DestRange.Value = SourceRange.Value 
    NRow = NRow + DestRange.Rows.Count 
    WorkBk.Close savechanges:=True 
Next NFile 
SummarySheet.Columns.AutoFit 
End Sub 

我试图让宏观运行不同的方式,我已经在上面添加的代码返回因为宏不存在或不是活动的一个错误。你有任何解决方法吗?我尝试了解我在网上找到的解决方案,但他们要么不与代码的其余部分一起工作,要么看起来很复杂。

谢谢!

回答

1
Set WorkBk = Workbooks.Open(FileName) 
Run "Détaildesmlh_Bouton1_Cliquer" #this is what doesn't work 

上述不起作用,因为语法不正确:)

试试这个。

Set WorkBk = Workbooks.Open(FileName) 
Application.Run FileName &"!Détaildesmlh_Bouton1_Cliquer" 

N.B. - 您可能需要从文件名剥离UNC路径(如果它存在并仅传递工作簿名称)(即 - MyBook.xlsm)

+0

它确实打开文件,但仍然表示该宏在工作簿中不可用或所有的宏已被禁用。那是我需要去除UNC路径的地方吗? – Doule

+1

1)您是否将Excel选项设置为自动启用宏?如果没有,请更改它们2)宏名称**完全**,因为它在工作簿中。如果没有,请调整。 3)开放工作簿中的宏是否在私有子中?如果是这样,请将其公开。 4)如果UNC路径存在,当您将“FileName”打印到即时窗口时,您将看到'\\ server \ folder \ file \ mybook.xlsm'。如果它在那里,你可以使用字符串操作来只获取文件名......实际上(写完所有内容后)只需使用'WorkBk.Name'而不是FileName。 –

相关问题