Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4339|回复: 13

[已解决]关于合并同一目录下多个excel文件的问题、inputBox()函数问题

[复制链接]
发表于 2011-10-21 17:03 | 显示全部楼层 |阅读模式
inputbox()函数弹出对话框,如果不输入,单击‘确定’,出错如图,单击‘取消’也出错

那位高手帮帮忙 未命名.JPG
解决单击‘取消’,确定(为空时)不提示这样的错误
代码如下:

Sub 合并当前目录下所有工作簿的全部工作表()
Dim MyPath, MyName, AWbName
Dim Wb As Workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Dim strFile As String
Application.ScreenUpdating = False
x:
strFile = InputBox("请关闭所有EXCLE文件,复制地址栏粘贴到文本框内,提取文件路径!", "打开路径下工作簿文件") & "\"
  
MyPath = strFile

MyName = Dir(MyPath & "\" & "*.xls")

AWbName = ActiveWorkbook.Name
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
.Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("A1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub
最佳答案
2011-10-22 07:48
  1. Sub 合并当前目录下所有工作簿的全部工作表()
  2.     Dim MyPath, MyName, AWbName
  3.     Dim Wb As Workbook, WbN As String
  4.     Dim G As Long
  5.     Dim Num As Long
  6.     Dim BOX As String
  7.     Dim strFile As String
  8.     Application.ScreenUpdating = False
  9.     strFile = InputBox("请关闭所有EXCLE文件,复制地址栏粘贴到文本框内,提取文件路径!", "打开路径下工作簿文件") & ""
  10.     If strFile = "" Then Exit Sub
  11.     MyPath = strFile
  12.     MyName = Dir(MyPath & "" & "*.xls")
  13.     AWbName = ActiveWorkbook.Name
  14.     Num = 0
  15.     Do While MyName <> ""
  16.         If MyName <> AWbName Then
  17.             Set Wb = Workbooks.Open(MyPath & "" & MyName)
  18.             Num = Num + 1
  19.             With Workbooks(1).ActiveSheet
  20.                 If Num = 1 Then
  21.                     .Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
  22.                 End If
  23.                 For G = 1 To Sheets.Count
  24.                     Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)
  25.                 Next
  26.                 WbN = WbN & Chr(13) & Wb.Name
  27.                 Wb.Close False
  28.             End With
  29.         End If
  30.         MyName = Dir
  31.     Loop
  32.     Range("A1").Select
  33.     Application.ScreenUpdating = True
  34.     MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
  35. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-10-21 17:30 | 显示全部楼层
strFile = InputBox("请关闭所有EXCLE文件,复制地址栏粘贴到文本框内,提取文件路径!", "打开路径下工作簿文件") & "\"
后面加一行,
if strfile = "" then exit sub

评分

参与人数 1 +1 收起 理由
cxsj717 + 1

查看全部评分

回复

使用道具 举报

发表于 2011-10-21 17:52 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-21 17:53 编辑

应该是:
....................
strFile = InputBox("请关闭所有EXCLE文件,复制地址栏粘贴到文本框内,提取文件路径!", "复制路径下工作簿文件") & "\"
If strFile = "\" Then Exit Sub
MyPath = strFile
....................

评分

参与人数 1 +1 收起 理由
cxsj717 + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-10-21 20:05 | 显示全部楼层
谢谢 两位老师的指教
回复

使用道具 举报

 楼主| 发表于 2011-10-21 20:33 | 显示全部楼层
未命名.JPG 这段代码合并电子表格后,带有文件的名字,怎么能把合并的文件名字去掉呢
如图,合并了三个文件,文件名分别是现场审核结果表,复件 现场审核结果表和复件 (2) 现场审核结果表
回复

使用道具 举报

发表于 2011-10-21 20:53 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-21 20:54 编辑

把这句注销即可:
.Cells(.Range("A65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)

评分

参与人数 1 +1 收起 理由
cxsj717 + 1 谢谢,

查看全部评分

回复

使用道具 举报

发表于 2011-10-21 20:56 | 显示全部楼层
本帖最后由 zjdh 于 2011-10-21 20:56 编辑

若表格间要空一行则以下语句
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)
改为
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 2, 1)

评分

参与人数 1 +1 收起 理由
cxsj717 + 1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-10-21 21:09 | 显示全部楼层
谢谢zjdh 的指导,
有没有办法在合并的时候,第一个sheet有表头,第二个、第三个。。第N个sheet没表头呢
回复

使用道具 举报

发表于 2011-10-21 21:19 | 显示全部楼层
cxsj717 发表于 2011-10-21 21:09
谢谢zjdh 的指导,
有没有办法在合并的时候,第一个sheet有表头,第二个、第三个。。第N个sheet没表头呢

改这一行Wb.Sheets(G).UsedRange.Copy .Cells(.Range("A65536").End(xlUp).Row + 1, 1)红色字部分
回复

使用道具 举报

 楼主| 发表于 2011-10-21 22:02 | 显示全部楼层
2266116
能说的再明白点吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 06:18 , Processed in 0.813621 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表