为什么我得到运行时错误'1004'与我的VBA代码复制并从一个工作簿粘贴到另一个?

我有我的macros的VBA代码的问题,我想要打开msoFileDialogFolderPicker和用户select一个文件夹,其中所有的Excel文件将被打开,一个接一个的数据将被从新打开的工作簿复制并粘贴到特定运行macros的工作簿中的工作表。 基本上我们给每个销售代表一个电子表格来填写他们的销售情况,然后把他们的电子表格提交给销售经理。 我想要做的,而不是有人不得不打开每个电子表格,并复制数据,并将其全部粘贴到一个电子表格手动,是简单地有一个macros为我这样做。 由于文件的位置和名称可以更改,我正在尽可能dynamic。 有可能是这样做的更好的方式,所以任何build议非常感谢!

我遇到的问题是,我得到的文件打开,他们复制,但后来我得到一个运行时错误1004'复制方法的范围类失败',当我试图让它粘贴在运行macros的工作簿。 我已经尝试了ThisWorkbook和ThisWorkbook.Activate来尝试告诉Excel去macros的运行的电子表格,但没有解决我的问题。 有时候我会经历错误,但仍然不会粘贴主工作簿中的数据。 我有我的代码写在下面。 无可否认,它主要是从我find的代码中复制出来的,但是我已经试图将其适用于我的目的。 我得到的错误是“wb1.Worksheets(1).Range(”A5“)。select”行。

Sub LoopAllExcelFilesInFolder() Dim wb As Workbook Dim wb1 As Workbook Dim myPath As String Dim myFile As String Dim myExtension As String Dim FldrPicker As FileDialog Application.ScreenUpdating = False Application.EnableEvents = False Application.Calculation = xlCalculationManual Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker) With FldrPicker .Title = "Select A Target Folder" .AllowMultiSelect = False If .Show <> -1 Then GoTo NextCode myPath = .SelectedItems(1) & "\" End With NextCode: myPath = myPath If myPath = "" Then GoTo ResetSettings myExtension = "*.xls*" myFile = Dir(myPath & myExtension) Do While myFile <> "" Set wb = Workbooks.Open(Filename:=myPath & myFile) Set wb1 = ThisWorkbook Do events wb.Worksheets(1).Range("A5:H28").Select Selection.Copy wb1.Activate wb1.Worksheets(1).Range("A5").Select ActiveSheet.Paste DoEvents myFile = Dir Loop MsgBox "Task Complete!" ResetSettings: Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub 

这是我最终要做的简化版本,它包括从新打开的工作簿中的多个工作表中复制事件,并将它们粘贴到最初运行macros的工作簿的多个工作表中。 然而在这一点上,我只是试图让这个简单的版本运行和工作。 感谢大家的帮助和对长码的道歉,但是我想给大家一个关于我在做什么的想法。 谢谢!

停止使用SelectActivate并编写使用Selection代码 – 这是macroslogging器。 你不是一个macroslogging器,你可以编写比这更好的代码。

这是做了太多的事情,并陷入与迟来的呼吁工作closuresObject ,这意味着你没有任何IntelliSense的帮助盲目input代码,没有自动完成,没有工具提示:

 wb.Worksheets(1).Range("A5:H28").Select 

你想在这里有一个Range对象。

 Dim source As Range Set source = wb.Worksheets(1).Range("A5:H28") 

现在,当你键入source.智能感知可以帮助你。 继续尝试:

 source.Copy[space] 

注意工具提示告诉你,你可以指定一个目的地,然后。

所以再做一个范围:

 Dim destination As Range Set destination = wb1.Worksheets(1).Range("A5") 

并复制!

 source.Copy destination 

现在,您应该在该循环结束之前调用wb.Close