【发布时间】:2018-02-21 08:18:19
【问题描述】:
我在尝试将工作簿页面合并到一个主文档时收到 1004 错误。该代码在我的设备上正常运行,但是当我尝试在我朋友的设备上运行代码时,它会引发 1004 错误。我相信他在 excel 2013 上,我在 excel 2016 上。有没有办法将我的代码转换为可以在两种设备上使用的东西?
Sub CombineSheets()
Dim sPath As String
Dim sFname As String
Dim wBk As Workbook
Dim wSht As Variant
Application.EnableEvents = False
Application.ScreenUpdating = False
sPath = InputBox("Enter a full path to workbooks")
ChDir sPath
sFname = InputBox("Enter a filename pattern")
sFname = Dir(sPath & "\" & sFname & ".xl*", vbNormal)
wSht = InputBox("Enter a worksheet name to copy")
Do Until sFname = ""
Set wBk = Workbooks.Open(sFname)
Windows(sFname).Activate
Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1)
wBk.Close False
sFname = Dir()
Loop
ActiveWorkbook.Save
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
当我运行它时,它可以正常工作,提示文件夹位置,询问它应该从哪些文件复制(通常是 *),然后从输入的工作表名称中复制。
实际上,我需要的只是可以从数百个 excel 文件中提取一张工作表并将它们组合成一个主文档的代码。能够挑选哪些工作表只是一个奖励。
谢谢!
【问题讨论】:
-
哪一行抛出异常?
-
不要
Activate窗口,不要使用不合格的Sheets集合隐式引用活动工作簿。如果您打算仅使用Worksheet对象,请使用Worksheets集合而不是Sheets集合。请改用您的wBk工作簿对象引用。wkb.Worksheets(wSht).Copy Before:=ThisWorkbook.Worksheets(1)。调用ThisWorkbook.Save而不是依赖它在关闭wBk后隐式重新激活。 -
另外,您的代码假定用户输入有效,并且不验证任何内容。也许从输入验证开始?
-
是网络驱动器上的文件。如果是这样,它们是否以相同的驱动器号映射到您的两台电脑上,例如“F:”。也许他的映射没有完成,他看到了路径 \\sa0036\blabla\foobar 而你看到的是相同的路径,如 "F:\foobar"
-
抛出错误的行是:Sheets(wSht).Copy Before:=ThisWorkbook.Sheets(1) 对不起,我是新来的(今天注册)