5、提取多工作簿指定工作表(名字查找),输出一张表

'前提: 合并文件夹内存在多工作簿文件,每个工作簿中存在多个sheet表。现在要汇总指定sheet表,最后输出在一张sheet表上。

假设有:“天气周报表”,,“天气周报表1”,“天气周报”,“天气周”,“地区”等多张表,

'要求:

输入“天气”或“周报表”就可以进行查找汇总所有的天气周报表到一张表上

步骤

1、新建一个Excel文件,插入一个vba模块,复制粘贴代码到新增的模块中,运行代码

2、选择需要汇总的文件——代码运行会弹出文件选择框,选择存放文件的文件夹

3、输入需要汇总的表名——输入表名的关键词语即可(如“天气”),输入表全称也可以(如“天气周报”)

Sub 汇总指定sheet表() 
    Dim t, tqsht As String
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set fd = Application.FileDialog(msoFileDialogFolderPicker) '请选择合并文件所在的文件夹
    If fd.Show = -1 Then '点击确定时,输出-1
        t = fd.SelectedItems(1) '记录文件夹名称
    Else
        MsgBox "未选择文件夹,流程退出"
        Exit Sub
    End If
    tqsht = InputBox("请输入提取表名的关键字")
    
    Dim arr()
    Dim wj, ad As String
    Dim r, c, u As Integer
    Dim tw, wb As Workbook
    Dim sht, twsht As Worksheet
    
    Set tw = ThisWorkbook
    wj = Dir(t & "\*.xls*") '获取文件夹内工作簿名称
    ReDim arr(1 To 1)
    If wj = "" Then
        Exit Sub
    End If
    Do While wj <> ""
        u = u + 1
        ReDim Preserve arr(1 To u)
        arr(UBound(arr)) = wj
        wj = Dir
    Loop
    
    tw.Sheets(1).Name = tqsht & "汇总"
    Set twsht = tw.Sheets(1)
    twsht.Cells.Clear
    
    For i = LBound(arr) To UBound(arr)
        Set wb = Workbooks.Open(t & "\" & arr(i))
            With wb
                For Each sht In .Sheets
                    If sht.Name Like "*" & tqsht & "*" Then
                        If twsht.Cells(1, 1).CurrentRegion.Rows.Count = 1 Then
                            sht.Cells(1, 1).CurrentRegion.Copy twsht.Range("A1") '复制、粘贴格式和值
                        Else
                            ad = twsht.Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Address
                            'Range("A2: " & ad)中数字 2 可以修改,此处默认第 1 行为标题行,从第 2 行开始复制、粘贴
                            sht.Range("A2: " & ad).Copy twsht.Range("A" & twsht.Cells(1, 1).CurrentRegion.Rows.Count + 1)
                        End If
                    End If
                Next sht
            End With
        wb.Close
    Next i
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是根据你的要求编写的Excel宏代码: ``` Sub CopySheetAndSave() ' 声明变量 Dim wb As Workbook Dim ws As Worksheet Dim newWB As Workbook Dim newWS As Worksheet Dim sheetName As String Dim fileName As String ' 获取要复制的工作名称 sheetName = "兴通讯成品运输提货单(空运)" ' 遍历所有工作簿查找指定名称的工作 For Each wb In Workbooks For Each ws In wb.Worksheets If ws.Name = sheetName Then ' 复制工作到新的工作簿 Set newWB = Workbooks.Add Set newWS = newWB.Sheets(1) ws.Copy Before:=newWS ' 将新工作所有公式转换成非公式 newWS.Cells.Copy newWS.Cells.PasteSpecial xlPasteValues ' 提取指定单元格的值并命名新工作文件 fileName = ws.Range("B3").Value & "-" & ws.Range("C3").Value & ".xlsx" newWB.SaveAs "C:\Users\" & Environ("username") & "\Desktop\" & fileName ' 关闭新工作簿 newWB.Close False ' 退出循环 Exit For End If Next ws If Not newWB Is Nothing Then Exit For Next wb End Sub ``` 这段宏代码会遍历所有打开的工作簿查找名称为“兴通讯成品运输提货单(空运)”的工作,并将其复制到一个新的工作簿。然后,它会将新工作所有公式转换为非公式,并提取单元格B3到F3的值来命名新工作文件。最后,它会将新工作保存到桌面上。 请注意,在执行此宏代码之前,请确保您已将工作名称更改为“兴通讯成品运输提货单(空运)”,并在B3到F3单元格输入了要提取的信息。此外,如果您希望将新工作保存到桌面之外的其他位置,请修改代码的保存路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值