在关闭的excel工作簿中运行宏并将结果合并到新工作簿中

在关闭的excel工作簿中运行宏并将结果合并到新工作簿中,excel,vba,Excel,Vba,我试图在几个相同的工作簿中运行宏,然后将这些工作簿的第一页合并到新工作簿中。多亏了互联网,合并部分工作正常,但我似乎没有把“运行宏”部分放下。以下是我目前的代码: 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

我试图在几个相同的工作簿中运行宏,然后将这些工作簿的第一页合并到新工作簿中。多亏了互联网,合并部分工作正常,但我似乎没有把“运行宏”部分放下。以下是我目前的代码:

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
我尝试了不同的方法来运行宏,上面添加的代码返回错误,因为宏不存在或不活动。你有什么解决办法吗?我试着浏览我在网上找到的解决方案,但它们要么与代码的其余部分不兼容,要么看起来非常复杂

谢谢

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"  

注意-如果文件名中有UNC路径,您可能需要将其从文件名中删除,只需传递工作簿名称(即-MyBook.xlsm)

它确实正确打开了文件,但仍然表示该宏在工作簿中不可用或所有宏都已停用。这就是我需要剥离UNC路径的地方吗?1)是否将Excel选项设置为自动启用宏?如果没有,请将其更改为2)宏名称与工作簿中的名称完全相同。如果没有,请进行调整。3) 打开工作簿中的宏是否在专用子文件夹中?如果是的话,就公开。4) 如果有UNC路径,当您将文件名打印到即时窗口时,您将看到
\\server\folder\file\mybook.xlsm
。如果它存在,您可以使用字符串操作仅获取文件名。。。实际上(在写了所有这些之后)只需使用
WorkBk.Name
而不是FileName。