ExcelVBA一键汇总多文件的指定工作表的到一个文件

2022-10-25 13:37:30 浏览数 (1)

ExcelVBA一键汇总多文件的指定工作表的到一个文件

【问题】下发给下面各单位的表格收集信息资料,上交上来后有很多个文件,文件的内容格式是一样(我下发时定的格式),我想把这些资料汇总在一起,

【传统做法】

打开一个文件—选中要的内容--复制—-粘贴到汇总表—关闭,

再打开一个文件—选中要的内容--复制—粘贴到汇总表—关闭,

再打开一个文件—选中要的内容-复制—粘贴到汇总表--关闭。。。。。天啊有100个,那我是不是要做一天重复再重重复复的工作。

【解决方法】VBA程序请上来帮我

1.把汇总的文件与上交文件放在这里

2.上交文件中全部是上交上来的文件

3.它们的格式是一样的

4.===代码如下=========

Sub 汇总指定文件指定工作表()

With Application.FileDialog(msoFileDialogFolderPicker)

'--------取得用户选择的文件夹路径

.InitialFileName = ThisWorkbook.Path

If .Show Then strPath = .SelectedItems(1) Else Exit Sub

End With

If Right(strPath, 1) <> "" Then strPath = strPath & ""

'MsgBox "选择了:" & Chr(10) & strPath

start_row = Application.InputBox("请输入工作表标题行数:", , 1, , , , , 1)

If start_row = "" Then Exit Sub

'如果按取消就退出

ti = Timer

Application.ScreenUpdating = False '重新打开屏幕更新

Application.DisplayAlerts = False

Set mysht = ActiveSheet

MsgBox mysht.Name

m = 1

mfile = Dir(strPath & "*.xls*")

Do While mfile <> ""

If mfile <> ThisWorkbook.Name Then

' MsgBox strPath & mfile

With GetObject(strPath & mfile)

If m = 1 Then

.Sheets(1).UsedRange.Copy mysht.Range("a1")

Else

mysht_row = mysht.UsedRange.Find("*", , , , 1, 2).Row 1

With .Sheets(1)

L_row = .Cells.Find("*", , , , 1, 2).Row

.Rows(start_row 1 & ":" & L_row).Copy

mysht.Rows(mysht_row).PasteSpecial Paste:=xlPasteAll

End With

End If

.Close False

End With

m = m 1

End If

mfile = Dir

Loop

Application.ScreenUpdating = True '重新打开屏幕更新

Application.DisplayAlerts = True

MsgBox "汇总完成,共汇总了 " & m & "个文件" & Chr(10) & "用时:" & Format(Timer - ti, "000.00秒")

End Sub

5.打开汇总文件按“ALT F11”出现visual Basic for application的窗口,插入一个模块,把代码放在这

6.插入一个按钮,指定宏是“汇总指定文件指定工作表”

7.点击按钮出现一个选择文件夹的对话框,确定

8.出现一上请输入标题行数的对话框,输入你的要汇总的文件标题行数

9.几秒后汇总完成啦。

.

=====今天就学习到此======

0 人点赞