excel - 选择多个工作簿,将每个工作簿中的第一个选项卡合并到同一工作簿中的新选项卡,使用文件名重命名选项卡

标签 excel vba merge filepath

目标:

  • 使用文件查找器选择多个工作簿(工作)
  • 将每个工作簿中的第一个工作表合并到同一工作簿中的新选项卡(错误)
  • 使用它来自的工作簿的文件名重命名新选项卡(工作)

  • 来源:
    我已经在互联网上搜索了不同的代码,但还没有找到完成所有这些的代码,我确信它在某个地方。我发现了几个相似的不同 Stack 页面,并尝试将它们组合起来。
  • VBA script to consolidate multiple excel sheets into one sheet
  • Combine first sheet of multiple workbooks into one workbook

  • 完整代码:
    Sub OpeningFiles()
    
    Dim SelectedFiles As FileDialog
    Dim NumFiles As Long, FileIndex As Long
    Dim TargetBook As Workbook
    Dim Path As String
    
    'prompt user to select a file or multiple files
    Set SelectedFiles = Application.FileDialog(msoFileDialogOpen)
    
    With SelectedFiles
        .AllowMultiSelect = True
        .Title = "Pick the files you'd like to consolidate:"
        .ButtonName = ""
        .Filters.Clear
        .Filters.Add ".xls files", "*.xls"
        .Show
    End With
    
    'check to see if user clicked cancel
    If SelectedFiles.SelectedItems.Count = 0 Then Exit Sub
    
    'start the loop over each file
    NumFiles = SelectedFiles.SelectedItems.Count
    For FileIndex = 1 To NumFiles
    
    'set a reference to the target workbook
    Set TargetBook = Workbooks.Open(SelectedFiles.SelectedItems(FileIndex))
    
    'consolidate
        Do While TargetBook <> ""
            Set Path = TargetBook.Path
            Workbooks.Open TargetBook:=Path & TargetBook, ReadOnly:=True
            With ActiveWorkbook
                .Worksheets(1).Copy after:=ThisWorkbook.Sheets(1)
                ThisWorkbook.Sheets(2).Name = .Name
            End With
            Workbooks(TargetBook).Close
            TargetBook = Dir()
        Loop
        
        TargetBook.Close SaveChanges:=False
    Next FileIndex
    
    
    End Sub
    
    问题:
    Do While TargetBook <> ""
        Set Path = TargetBook.Path
        Workbooks.Open TargetBook:=Path & TargetBook, ReadOnly:=True
    
    当我组合代码时这里出了点问题,我不确定是什么。我想我需要引用所选文件的文件路径,但我不知道如何设置此代码的方式。我在 Set Path 上收到对象所需错误.我什至不确定是否需要这样做,或者是否有其他方式来构建 Workbooks.Open TargetBook:=Path & TargetBook, ReadOnly:=True它不需要路径对象。

    最佳答案

    来自@SJR 的评论:像这样 -

    '...
    NumFiles = SelectedFiles.SelectedItems.Count
    For FileIndex = 1 To NumFiles
    
        'open workbook for a "With" block
        With Workbooks.Open(SelectedFiles.SelectedItems(FileIndex))
            .Worksheets(1).Copy after:=ThisWorkbook.Sheets(1)
            ThisWorkbook.Sheets(2).Name = .Name
            .Close False 'no save
        End With
    
    Next FileIndex
    '...
    

    关于excel - 选择多个工作簿,将每个工作簿中的第一个选项卡合并到同一工作簿中的新选项卡,使用文件名重命名选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63962252/

    相关文章:

    c# - 即使在释放资源后也无法关闭 excel

    Excel VBA 范围直到最后一个可用单元格

    VBA-下拉导航到工作表/工作簿

    vba - Solidworks 2013 - 更新宏并出现错误 "GetCurrentSheet"

    excel - 由于依赖问题,无法使用spark-excel导出数据框

    当工作表单元格写入时,从单元格调用的 Excel VBA 公式停止处理 VBA,或遇到应用程序定义的错误

    java - 合并不等长的排序数组

    c - 将排序的多个文件合并为 1 个排序的文件

    java - OOXML 电子表格中的默认单元格类型

    Git:请求请求后为 "This branch is behind"