超出范围错误将数据从一个工作簿复制到另一个工作簿

你好,我是非常新的VBA只是不老到Excel,我试图写一个macros,将允许用户select一个文件,然后从该文件复制2个单独的数据范围,并将其粘贴到原来的活动工作簿。

确定后,审查这个我已经改变了我的代码:

Sub GetFastScanData() 'Add file name to Active Sheet Dim intChoice As Integer Dim strPath As String Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False intChoice = Application.FileDialog(msoFileDialogOpen).Show If intChoice <> 0 Then strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) Cells(1, 1) = strPath 'Open Source WorkBook Dim sourceWB As Workbook Set sourceWB = Application.Workbooks.Open(strPath) 'Give names to items Dim Var1 As String Var1 = "BT16" Dim Var2 As Integer Var2 = 1 Dim Var3 As String Var3 = "BU16" 'Copy from Source to Target sourceWB.Sheets(Var2).Range("F1:F55000").Copy _ Destination:=Workbooks.Sheets("PI-2 data").Range(Var1) sourceWB.Sheets(Var2).Range("I2:I55000").Copy _ Destination:=Workbooks.Sheets("PI-2 data").Range(Var3) 'Close Source WorkBook wo/Save sourceWB.Close False End If End Sub 

我现在唯一的问题是,我想我得到一个错误,由于12/9/2014的Windows更新? 编译错误:未find数据


原帖:

我真的是新的VBA,但我绝对不是Excel的新手。 我有一个试图将数据从选定文件复制到当前工作簿的macros的问题。 我得到macros的斜体部分超出范围的错误。 任何帮助是极大的赞赏!

 Sub GetFastScanData() 'Add file name to Active Sheet Dim intChoice As Integer Dim strPath As String Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False intChoice = Application.FileDialog(msoFileDialogOpen).Show If intChoice <> 0 Then strPath = Application.FileDialog(msoFileDialogOpen).SelectedItems(1) Cells(1, 65) = strPath 'Open Source WorkBook Application.Workbooks.Open (strPath) 'Give names to workbooks and items Dim Var1 As String, Var1R As String Var1 = ActiveWorkbook.Name Var1R = "BT16" Dim Var2 As String, Var2R As String Var2 = ActiveWorkbook.Name Var2R = 1 Dim Var3 As String, Var3R As String Var3 = ActiveWorkbook.Name Var3R = "BU16" 'Copy from Source to Target *sourceWB.Sheets(Var2R).Columns(6).EntireColumn.Copy _ Destination:=Workbooks(Var1).Sheets("PI-2 data").Range(VarR1)* Sheets(Var2R).Columns(9).EntireColumn.Copy _ Destination:=Workbooks(Var3).Sheets("PI-2 data").Range(Var3R) 'Close Source WorkBook wo/Save Workbooks(Var2).Close False End If End Sub 

如果您要复制整个列,那么目标范围需要在第1行。否则,没有足够的行来容纳您要粘贴的值(请记住,这将从每一行复制条目 – 全部1,048,576个 – 而不仅仅是你实际使用的)。 如果你只想复制列的一部分,那么不要使用.EntireColumn

目前还不清楚Var1Var2Var3是什么,因为它们都以同一个工作簿的名字命名。 虽然每个分配的ActiveWorkbook.Name的值,没有任何更改每个分配之间的活动工作簿,因此他们都获得相同的值

编辑:replace.Columns(6).EntireColumn.Copy.Range("F2:F55000").Copy并replace.Columns(9).EntireColumn.Copy.Range("I2:I55000").Copy 。 还有其他更好的方法来实现这一点,但这是最容易理解的。

你仍然需要确定你认为你正在拷贝的工作簿。 sourceWB没有在任何地方定义,其他三个variables都与相同的工作簿有关。

应该这样:

 'Open Source WorkBook Application.Workbooks.Open (strPath) 

而是这样:

 'Open Source WorkBook Dim sourceWB As Workbook Set sourceWB = Application.Workbooks.Open(strPath) 

很难解释Var1Var3是什么意思。 唯一明显的用法是将此macros存储在工作簿中,但是您可能会打开其他工作簿,而这些工作簿未在现有代码中明确提到。 如果它们打算与存储在其中的macros相关联的工作簿,则:

 'Give names to items Dim Var1R As String Var1R = "BT16" Dim Var2R As Integer Var2R = 1 Dim Var3R As String Var3R = "BU16" 'Copy from Source to Target sourceWB.Sheets(Var2R).Range("F2:F55000").Copy _ Destination:=ThisWorkbook.Sheets("PI-2 data").Range(VarR1) sourceWB.Sheets(Var2R).Range("I2:I55000").Copy _ Destination:=ThisWorkbook.Sheets("PI-2 data").Range(Var3R) 'Close Source WorkBook wo/Save sourceWB.Close False