Sub 合并工作薄() Dim FilesToOpen Dim x As Integer On Error GoTo ErrHandler Application.ScreenUpdating = False FilesToOpen = Application.GetOpenFilename _ (FileFilter:="MicroSoft Excel文件(*.xls), *.xls", _ MultiSelect:=True, Title:="要合并的文件") If TypeName(FilesToOpen) = "Boolean" Then MsgBox "没有选中文件" GoTo ExitHandler End If x = 1 While x <= UBound(FilesToOpen) Workbooks.Open Filename:=FilesToOpen(x) Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) x = x + 1 WendExitHandler: Application.ScreenUpdating = True Exit SubErrHandler: MsgBox Err.Description Resume ExitHandlerEnd Sub
å¯ä»¥åé®ï¼
Sub å并工ä½è()
Dim FilesToOpen
Dim x As Integer
On Error GoTo ErrHandler
Application.ScreenUpdating = False 'ç¦ç¨å±å¹å·æ°ï¼æé«ä»£ç è¿è¡æç
FilesToOpen = Application.GetOpenFilename _
(FileFilter:="MicroSoft Excelæ件(*.xls), *.xls", _
MultiSelect:=True, Title:="è¦å并çæ件") 'å¼¹åºæå¼æ件çé¢ï¼æ¾ç¤ºå¹¶éæ©è¦å并çExcelæ件ï¼æ¯æå¤é
If TypeName(FilesToOpen) = "Boolean" Then 'æªåä»»ä½éæ©
MsgBox "没æéä¸æ件" 'åæ示没æéä¸æ件
GoTo ExitHandler 'ç¶å跳转è³ExitHandler
End If
x = 1
While x <= UBound(FilesToOpen) 'xä»1å°æå¼æ件ç个æ°å¾ªç¯
Workbooks.Open Filename:=FilesToOpen(x) '以æ¤æå¼æ件
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 'å°æå¼çæ件工ä½è¡¨ç§»å¨å°è¿ä¸ªå·¥ä½è¡¨çæåä¸ä¸ªå·¥ä½è¡¨åé¢
x = x + 1
Wend
ExitHandler: 'å¦æä¸éæ©æ件ï¼ä¸æ§è¡ä¸è¿°æ件å并æä½
Application.ScreenUpdating = True 'å¯ç¨å±å¹å·æ°å¹¶éåºç¨åº
Exit Sub
ErrHandler:
MsgBox Err.Description 'å¦æåºç°é误ï¼å¼¹æ¡æ示é误
Resume ExitHandler 'è¿åExitHandlerï¼å³å¯ç¨å±å¹å·æ°å¹¶éåºç¨åº
End Sub追é®
å¦æææ³ä»æå¼çå·¥ä½è¡¨éï¼ä»ç¬¬åè¡å¼å§å¤å¶å°è¿ä¸ªå·¥ä½è¡¨çæåä¸ä¸ªå·¥ä½è¡¨åé¢
å°±æ¯âSheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) 'å°æå¼çæ件工ä½è¡¨ç§»å¨å°è¿ä¸ªå·¥ä½è¡¨çæåä¸ä¸ªå·¥ä½è¡¨åé¢â
æä¹ä¿®æ¹å¢ï¼
ï¼å¦å¤ï¼æ¯ä¸ªå·¥ä½ç°¿é½æ2个工ä½è¡¨ï¼åååå«æ¯âPC端â å âæ 线端âï¼æä¹åå«æ±æ»ï¼
首先,鱼木混猪,于2017-06-09推荐的代码很好,受益。
其次,试着回答一下您在追问中有关去除工作表前4行再复制到当前工作薄的问题。
1.合并工作薄 、合并工作表是两个问题,题主贴出的代码是解决合并工作薄的。
合并工作薄的时候,最小操作粒度是工作表,是对整个工作表进行移动、复制
2.如果要实现题主在追问中有关去除工作表前4行的要求,就涉及合并工作表的问题了
合并工作表,可以操作到具体行。
猜测,题主是想去除多余的表头。
也看到晚上有代码,同时解决合并工作薄与工作表的,但有些繁琐,一段代码解决一个问题,模块化实现,需要的时候调用相应的功能模块就好。
反正用VBA对程序执行效率要求不是太高,再慢也比人工手动操作快。
还是模块化实现,这样层次、逻辑更清晰,代码重复使用率也更高。