Arrays 激活存储在数组中的文件窗口,但获取下标超出范围错误? 子合并() 将文件设置为字符串 Dim AllFiles(),文件名为变量 Dim count、test、StartRow、LastRow、LastColumn等长 细胞作为变异体 测试=0 ChDir“C:\”,如果感兴趣的文件位于“Jerry Hou”文件夹中,请为您的计算机插入合适的目录,例如:ChDir“C:\Users\Jerry Hou\” 重拨所有文件(1) 做 Application.EnableCancelKey=xlDisabled File=Application.GetOpenFilename(“XML文件(*.XML),*.XML”,1,“选择要合并的文件”)”需要选择才能合并文件 Application.EnableCancelKey=xlErrorHandler 如果为(File=“False”),则退出Do 重拨保留所有文件(计数)'保留? 所有文件(计数)=文件的文件==文件名和目录 计数=(计数+1) 如果(MsgBox(“选择另一个要合并的文件?”,vbQuestion+vbOKCancel,“合并文件”)=vbCancel),则退出Do 循环“在MsgBox中选择“取消”以完成合并文件选择 如果(计数=0),则 MsgBox“无选择”,如果您点击“从打开提示窗口退出” 出口接头 如果结束 对于count=0到UBound(所有文件) MsgBox“用户选择的文件名:”&所有文件(计数) 下一个 测试=计数 对于test=UBound(所有文件)到LBound(所有文件)步骤-1 工作簿。打开文件名:=所有文件(测试) 下一个 重拨所有文件(计数) 测试=2 边做边做(测试 您重拨了所有文件,但从未填充任何内容。是否缺少代码 AllFiles是基于0的数组,因此如果要从第二个元素开始,则需要使用test=1而不是test=2

Arrays 激活存储在数组中的文件窗口,但获取下标超出范围错误? 子合并() 将文件设置为字符串 Dim AllFiles(),文件名为变量 Dim count、test、StartRow、LastRow、LastColumn等长 细胞作为变异体 测试=0 ChDir“C:\”,如果感兴趣的文件位于“Jerry Hou”文件夹中,请为您的计算机插入合适的目录,例如:ChDir“C:\Users\Jerry Hou\” 重拨所有文件(1) 做 Application.EnableCancelKey=xlDisabled File=Application.GetOpenFilename(“XML文件(*.XML),*.XML”,1,“选择要合并的文件”)”需要选择才能合并文件 Application.EnableCancelKey=xlErrorHandler 如果为(File=“False”),则退出Do 重拨保留所有文件(计数)'保留? 所有文件(计数)=文件的文件==文件名和目录 计数=(计数+1) 如果(MsgBox(“选择另一个要合并的文件?”,vbQuestion+vbOKCancel,“合并文件”)=vbCancel),则退出Do 循环“在MsgBox中选择“取消”以完成合并文件选择 如果(计数=0),则 MsgBox“无选择”,如果您点击“从打开提示窗口退出” 出口接头 如果结束 对于count=0到UBound(所有文件) MsgBox“用户选择的文件名:”&所有文件(计数) 下一个 测试=计数 对于test=UBound(所有文件)到LBound(所有文件)步骤-1 工作簿。打开文件名:=所有文件(测试) 下一个 重拨所有文件(计数) 测试=2 边做边做(测试 您重拨了所有文件,但从未填充任何内容。是否缺少代码 AllFiles是基于0的数组,因此如果要从第二个元素开始,则需要使用test=1而不是test=2,arrays,excel,vba,type-mismatch,save-as,Arrays,Excel,Vba,Type Mismatch,Save As,要在数组中循环,请尝试以下操作: 对于test=1到ubound(AllFiles)-1'这将在数组中从第二个元素循环到最后一个元素 “LastRow”是命名范围吗?如果不是,则不起作用。下面将选择工作表中最后使用的行: activesheet.Rows(activesheet.usedrange.Rows.count)。选择 您的SaveAs失败,因为1)所有文件看起来从未填充,2)您编写的保存路径实际上是:C:\Allfile(1)&AllFiles(count)\.xlsm。你想要: Ac

要在数组中循环,请尝试以下操作:

对于test=1到ubound(AllFiles)-1'这将在数组中从第二个元素循环到最后一个元素

  • “LastRow”是命名范围吗?如果不是,则不起作用。下面将选择工作表中最后使用的行:

    activesheet.Rows(activesheet.usedrange.Rows.count)。选择

  • 您的SaveAs失败,因为1)所有文件看起来从未填充,2)您编写的保存路径实际上是:
    C:\Allfile(1)&AllFiles(count)\.xlsm
    。你想要:

    ActiveWorkbook.SaveAs文件名:=“C:\”&AllFiles(1)&AllFiles(test)和“.xlsm”

  • 代码更新后编辑

    • 如果您从未初始化计数变量,请在开头添加
      count=0
      ,以确保安全

    • GetOpenFilename
      实际上返回完整路径。一旦将该路径存储在变量(如AllFiles())中,您就可以使用
      mid(AllFiles(test)、instrrev(AllFiles(test),“\”)+1)获得文件名部分。

    • 在执行主Do循环之前,您不需要重拨所有文件(计数)。除非使用保留关键字,否则ReDim将擦除数组的内容

    • 更改
      工作簿(所有文件(测试))。激活
      工作簿(Mid(所有文件(测试)),InStrRev(所有文件(测试),“\”)+1))。激活
      以去除路径信息,只保留文件名

    • Windows(“Allfiles(1).xml”).Activate将无法工作,因为您发送了一个文本字符串。您需要
      工作簿(Mid(所有文件(1)、InStrRev(所有文件(1),“\”)+1))。请再次在此处激活

    • LastRow=LastRow+1
      可能不是你的意思。尝试设置LastRow=LastRow.Offset(1,0)

    • 更改
      范围(“LastRow”)。选择
      LastRow。选择

    • 窗口(
      的所有实例都应更改为
      工作簿(


    谢谢。但是Windows(所有文件(测试)).Activate命令的语法应该是什么?我错过了一个错误。它应该是工作簿(所有文件(测试)),而不是Windows。您能编辑您的问题并包含过程中的所有代码吗?我注意到所有文件(测试)包含感兴趣的文件的完整路径/目录。我使用工作簿(“filename.xls”)的所有其他实例。activate是我只键入文件标题而不是完整路径的地方。我如何只提取文件标题?问题是否是该文件是xml而不是xlsm?
    Sub Merge()
    Dim File      As String
    Dim AllFiles(), Filename As Variant
    Dim count, test, StartRow, LastRow, LastColumn As Long
    Dim LastCell As Variant
    test = 0
    ChDir "C:\" 'Insert suitable directory for your computer ex:ChDir "C:\Users\Jerry Hou\" if file of interest is in "Jerry Hou" Folder
      ReDim AllFiles(1)
    Do
        Application.EnableCancelKey = xlDisabled
        File = Application.GetOpenFilename("XML Files (*.xml),*.xml", 1, "Select File to be Merged") 'Needs to select in Order to merge files
        Application.EnableCancelKey = xlErrorHandler
        If (File = "False") Then Exit Do
        ReDim Preserve AllFiles(count) 'Preserve ?
        AllFiles(count) = File 'File== file name and directory
        count = (count + 1)
        If (MsgBox("Select Another File To be Merged With?", vbQuestion + vbOKCancel, "Merge Files") = vbCancel) Then Exit Do
    Loop  'Select Cancel in MsgBox to finish merge file(s) selection
    
    If (count = 0) Then
        MsgBox "No selection" 'If you hit Exit from open prompt window
        Exit Sub
    End If
    
     For count = 0 To UBound(AllFiles)
        MsgBox "User selected file name: " & AllFiles(count)
    
    Next
     test = count
     For test = UBound(AllFiles) To LBound(AllFiles) Step -1
     Workbooks.Open Filename:=AllFiles(test)
    Next
    
    ReDim AllFiles(count)
     test = 2
    Do While (test <= count)
    Filename = AllFiles(test)
    Workbooks(AllFiles(test)).Activate 'ERROR Brings 2nd file that the user had selected to Last xml file selected in order to Front
     'Copy and Paste TMG tab
     Sheets("TMG_4 0").Activate
     StartRow = 2
     LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
     LastColumn = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
     LastCell = Cells(LastRow, LastColumn).Address 'Find lastcell of to be copied file
     Range("A2:" & LastCell).Select
     Selection.Copy
     Windows("Allfiles(1).xml").Activate 'ERROR
     Sheets("TMG_4 0").Activate
     LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
     LastRow = LastRow + 1
     Range("LastRow").Select 'ERROR
     ActiveSheet.Paste
    
     'Copy and Paste Gamma tab
     Sheets("GammaCPS 0").Activate
     StartRow = 2
     LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
     LastColumn = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
     LastCell = Cells(LastRow, LastColumn).Address
     Range("A2:" & LastCell).Select
     Selection.Copy
    
     Windows("Allfiles(1).xml").Activate 'ERROR Windows("File_name.xlsm").activate 
     Sheets("GammaCPS 0").Activate
     LastRow = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
     LastRow = LastRow + 1
     Range("LastRow").Select 'ERROR
     ActiveSheet.Paste
     test = test + 1
    Loop
    
    Windows("Allfiles(1).xml").Activate 'ERROR
    
    ActiveWorkbook.SaveAs Filename:="C:\" & AllFiles(1) & AllFiles(test) & ".xlsm", FileFormat:=52