将数据从一个工作簿复制到另一个工作簿时出现超出范围错误
Out of Range error copying data from one workbook to another
大家好,我对 VBA 非常陌生,对 Excel 并不陌生,我正在尝试编写一个允许用户 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 更新,我认为我遇到了错误?编译错误:找不到数据
原post:
我真的是 VBA 的新手,但我绝对不是 Excel 的菜鸟。我在尝试将数据从 selected 文件复制到当前工作簿的宏时遇到问题。我收到宏斜体部分的超出范围错误。非常感谢任何帮助!
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
不清楚 Var1
、Var2
和 Var3
的用途,因为它们都以同一个工作簿的名称结尾。虽然每个人都被分配了 ActiveWorkbook.Name
的值,但在每次分配之间没有任何改变活动工作簿,因此它们都获得相同的值
编辑: 将 .Columns(6).EntireColumn.Copy
替换为 .Range("F2:F55000").Copy
,并将 .Columns(9).EntireColumn.Copy
替换为 .Range("I2:I55000").Copy
。还有其他更好的方法可以实现这一点,但这是最容易理解的。
您仍然需要弄清楚您认为要将内容复制到哪个工作簿。 sourceWB
未在任何地方定义,其他三个变量都与同一工作簿相关。
应该这样:
'Open Source WorkBook
Application.Workbooks.Open (strPath)
而是这样:
'Open Source WorkBook
Dim sourceWB As Workbook
Set sourceWB = Application.Workbooks.Open(strPath)
很难解释 Var1
和 Var3
的用途。唯一明显的用法是用于存储此宏的工作簿,但您可能打开了其他未在现有代码中明确引用的工作簿。如果它们打算与存储宏的工作簿相关,则:
'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
大家好,我对 VBA 非常陌生,对 Excel 并不陌生,我正在尝试编写一个允许用户 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 更新,我认为我遇到了错误?编译错误:找不到数据
原post:
我真的是 VBA 的新手,但我绝对不是 Excel 的菜鸟。我在尝试将数据从 selected 文件复制到当前工作簿的宏时遇到问题。我收到宏斜体部分的超出范围错误。非常感谢任何帮助!
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
不清楚 Var1
、Var2
和 Var3
的用途,因为它们都以同一个工作簿的名称结尾。虽然每个人都被分配了 ActiveWorkbook.Name
的值,但在每次分配之间没有任何改变活动工作簿,因此它们都获得相同的值
编辑: 将 .Columns(6).EntireColumn.Copy
替换为 .Range("F2:F55000").Copy
,并将 .Columns(9).EntireColumn.Copy
替换为 .Range("I2:I55000").Copy
。还有其他更好的方法可以实现这一点,但这是最容易理解的。
您仍然需要弄清楚您认为要将内容复制到哪个工作簿。 sourceWB
未在任何地方定义,其他三个变量都与同一工作簿相关。
应该这样:
'Open Source WorkBook
Application.Workbooks.Open (strPath)
而是这样:
'Open Source WorkBook
Dim sourceWB As Workbook
Set sourceWB = Application.Workbooks.Open(strPath)
很难解释 Var1
和 Var3
的用途。唯一明显的用法是用于存储此宏的工作簿,但您可能打开了其他未在现有代码中明确引用的工作簿。如果它们打算与存储宏的工作簿相关,则:
'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