下标超出范围错误-VBA错误
对于下面的代码,我不断得到超出范围的下标,我是VBA新手,因此非常感谢您的帮助 我试图引用一个包含各种源工作簿的表,并将数据从这里复制到同样包含在稳定范围内的“目标”工作簿 谢谢, 罗南下标超出范围错误-VBA错误,vba,excel,subscript,indexoutofrangeexception,Vba,Excel,Subscript,Indexoutofrangeexception,对于下面的代码,我不断得到超出范围的下标,我是VBA新手,因此非常感谢您的帮助 我试图引用一个包含各种源工作簿的表,并将数据从这里复制到同样包含在稳定范围内的“目标”工作簿 谢谢, 罗南 造成此问题的原因是,当您打开一个新工作簿时,您正在更改活动工作簿的内容,并且默认情况下,您的代码是使用ActiveWorkbook,因为您没有限定工作表集合来说明它们真正引用的工作簿 解决此问题的最简单方法是创建一个引用,该引用在启动代码时处于活动状态: 'Define source(s) and target
造成此问题的原因是,当您
打开一个新工作簿时,您正在更改活动工作簿的内容,并且默认情况下,您的代码是使用ActiveWorkbook
,因为您没有限定工作表
集合来说明它们真正引用的工作簿
解决此问题的最简单方法是创建一个引用,该引用在启动代码时处于活动状态:
'Define source(s) and target(t) sheets
sTable = "rng_SourceData"
Dim wbTable As Workbook
Set wbTable = ActiveWorkbook
'Shorten some code by using a With block
With wbTable.Worksheets("I.Import").Range(sTable)
'loop through source table to copy and paste requred data
sRow = .Rows.Count
For cRow = 1 To sRow
sFileName = .Cells(cRow, 1)
sInputSheet = .Cells(cRow, 2)
sRange = .Cells(cRow, 3)
tFileName = .Cells(cRow, 4)
tRange = .Cells(cRow, 5)
tSheet = .Cells(cRow, 6)
'Include all ranges in the input table
ImportDataSpreadsheet sFileName, sInputSheet, sRange, tSheet, tRange
Next cRow
End With
由于代码现在总是引用在打开任何其他工作簿之前设置的wbTable
,因此代码将引用正确的工作表
注意:理论上,我们实际上不需要wbTable
,我们可以使用
With ActiveWorkbook.Worksheets("I.Import").Range(sTable)
块,但我个人倾向于设置临时对象。问题的原因是,当您打开新工作簿时,您正在更改什么是ActiveWorkbook
,默认情况下,您的代码是使用ActiveWorkbook
,因为您没有限定工作表
集合来说明它们真正引用的工作簿
解决此问题的最简单方法是创建一个引用,该引用在启动代码时处于活动状态:
'Define source(s) and target(t) sheets
sTable = "rng_SourceData"
Dim wbTable As Workbook
Set wbTable = ActiveWorkbook
'Shorten some code by using a With block
With wbTable.Worksheets("I.Import").Range(sTable)
'loop through source table to copy and paste requred data
sRow = .Rows.Count
For cRow = 1 To sRow
sFileName = .Cells(cRow, 1)
sInputSheet = .Cells(cRow, 2)
sRange = .Cells(cRow, 3)
tFileName = .Cells(cRow, 4)
tRange = .Cells(cRow, 5)
tSheet = .Cells(cRow, 6)
'Include all ranges in the input table
ImportDataSpreadsheet sFileName, sInputSheet, sRange, tSheet, tRange
Next cRow
End With
由于代码现在总是引用在打开任何其他工作簿之前设置的wbTable
,因此代码将引用正确的工作表
注意:理论上,我们实际上不需要wbTable
,我们可以使用
With ActiveWorkbook.Worksheets("I.Import").Range(sTable)
块,但我个人倾向于设置该临时对象。在哪一行出现错误?@ScottCraner我在这一行出现错误:sInputSheet=Worksheets(“I.Import”).Range(稳定)。Cells(cRow,2)当前活动工作簿中是否有名为“I.Import”的工作表?(当cRow
为1时,它会崩溃吗?或者直到cRow
为2时才会崩溃?如果它适用于1而不是2,那么错误可能在importdata电子表格中,这可能会更改活动工作簿。)感谢您指出我的愚蠢错误@YowE3K-我使用了I.Import而不是I.Import(空格)@YowE3K我遇到了另一个问题,希望您能提供帮助:您在哪一行收到错误?@ScottCraner我在这一行收到错误:sInputSheet=Worksheets(“I.Import”)。范围(稳定)。单元格(cRow,2)当前活动工作簿中是否有名为“I.Import”的工作表?(当cRow
为1时,它会崩溃吗?或者直到cRow
为2时才会崩溃?如果它适用于1而不是2,那么错误可能在importdata电子表格中,这可能会更改活动工作簿。)感谢您指出我的愚蠢错误@YowE3K-我使用了I.Import而不是I.Import(空格)@YowE3K我遇到了另一个问题,我希望您能提供帮助: