Microsoft Excel VBA 输出文件夹内全部Excel内的sheet

问题场景

简述:
打开Summary.xlsm的文件,需要在此写一个VBA程序,读取一个指定文件夹的全部Excel,每个Excel的名称都变成Summary.xlsm的sheet名称,然后输入每个Excel的sheet名称到A列内(第一个单元格是列名"SheetsName")。


代码描述

  1. 获取指定文件夹中的所有Excel文件。
  2. 对于每个Excel文件:
    • 创建一个新的sheet工作表,以文件名(不带扩展名)命名。
    • 在新工作表的A列中列出该Excel文件中的所有工作表名称。
Sub ListSheets()
    Dim FileSystem As Object
    Dim Folder As Object
    Dim File As Object
    Dim SourceWorkbook As Workbook
    Dim SourceSheet As Worksheet
    Dim wbCheck As Workbook
    Dim wsSummary As Worksheet
    Dim NewSheet As Worksheet
    
    Dim FolderPath As String
    Dim FileName As String
    Dim FileNameCell As Range
    Dim SheetNameCell As Range
    Dim i As Integer
    Dim SheetIndex As Integer

    ' 设置要扫描的文件夹路径
    FolderPath = "C:\Folder\Path" ' 修改文件夹路径

    ' 确保文件夹路径以反斜杠结束
    If Right(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\"

    ' 设置wbCheck 为当前活动的工作簿
    Set wbCheck = ThisWorkbook

    ' 创建FileSystemObject
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    Set Folder = FileSystem.GetFolder(FolderPath)

    ' 找到名称为"FileName"的单元格
    On Error Resume Next ' 如果未找到名称定义,避免错误
    Set FileNameCell = ws.Range("FileName")
    On Error GoTo 0 ' 重新启用错误报告

    ' 如果找不到名称定义,则退出宏
    If FileNameCell Is Nothing Then
        MsgBox "The range name 'FileName' is not defined.", vbExclamation, "Range Name Not Found"
        Exit Sub
    End If

    ' 从"FileName"单元格下一行开始
    i = FileNameCell.Row + 1

    ' 遍历文件夹中的每个Excel文件
    For Each File In Folder.Files
        If LCase(FileSystem.GetExtensionName(File.Path)) Like "xls*" Then
			' 文件名称写入Excel中
			wsSummary.Cells(i, FileNameCell.Column).Value = FileName = FileSystem.GetBaseName(File.Path)
            ' 在wbCheck 中创建一个新的工作表
            Set NewSheet = wbCheck .Sheets.Add(After:=wbCheck .Sheets(wbCheck .Sheets.Count))
            NewSheet.Name = FileName

            ' 打开源Excel文件
            Set SourceWorkbook = Workbooks.Open(File.Path)

            ' 列出源Excel文件中的所有工作表名称
            SheetIndex = 1
            For Each SourceSheet In SourceWorkbook.Sheets
                NewSheet.Cells(SheetIndex, 1).Value = SourceSheet.Name
                SheetIndex = SheetIndex + 1
            Next SourceSheet

            ' 关闭源Excel文件
            SourceWorkbook.Close SaveChanges:=False
           
            i = i + 1
        End If
    Next File

    ' 清理
    Set File = Nothing
    Set Folder = Nothing
    Set FileSystem = Nothing
    Set SourceWorkbook = Nothing
    Set SourceSheet = Nothing
    Set NewSheet = Nothing
End Sub

注意事项

  • 在运行这个宏之前,请确保Summary.xlsm文件已经打开并且有足够的权限访问指定的文件夹。

  • 此代码也假设所有的Excel文件都有 .xls.xlsx.xlsm 等扩展名,如果有其他格式的Excel文件,需要调整 Like "xls*" 这一行代码来匹配它们。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值