我只有2条简单的行,Excel VBA一直告诉我订阅超出范围......为什么?
Sub try_again()
'Dim res As Variant
Dim Per_Mnd As Variant
Dim Per_Mnd2 As Variant
Per_Mnd = Worksheets("Res_Lege").Range("F41:AD41")
Worksheets("Res_Kontor_over").Range("F6:AD6").Value = Per_Mnd
End Sub
答案 0 :(得分:0)
尝试这样的事情:
Set Per_Mnd = Worksheets("Res_Lege").Range("F41:AD41")
Worksheets("Res_Kontor_over").Range("F6:AD6").Value = Per_Mnd.Cells(1, 1)
Set
- s Per_Mnd
为Range
,因此应该有效。然后,当您要求将值放在Range("F6:AD6")
中时,它会占用Per_Mnd
的第一个单元格并将其分配到那里。
答案 1 :(得分:0)
那将是下标超出范围,但从不关注错字,Rubberduck(免责声明:我拥有/管理这个开源项目)会在此处触发检查结果:< / p>
Per_Mnd = Worksheets("Res_Lege").Range("F41:AD41")
另一个在这里:
Worksheets("Res_Kontor_over").Range("F6:AD6").Value = Per_Mnd
检查结果会说:
隐式活动工作簿参考
对活动工作簿的隐式引用会使代码变得脆弱且难以调试。考虑在预期时使这些引用显式化,并且更喜欢处理对象引用。
换句话说,如果您100%确定工作表名称中没有拼写错误,那么看起来ActiveWorkbook
不是您的代码[隐式]假设的工作簿。
即此代码完全等效:
Per_Mnd = ActiveWorkbook.Worksheets("Res_Lege").Range("F41:AD41").Value
如果您打算使用您的代码已打开的工作簿,请确保在打开它时保留对该对象的引用:
{ {2}}如果您要使用包含此代码的工作簿,请使用Dim wb As Excel.Workbook
Set wb = Application.Workbooks.Open(path)
'...
'now qualify the Worksheets collection with this 'wb' object:
Per_Mnd = wb.Worksheets("Res_Lege").Range("F41:AD41")
限定Worksheets
来电:
ThisWorkbook
如果工作表在编译时存在,给它一个代码名称(属性工具窗口/ F4中的Per_Mnd = ThisWorkbook.Worksheets("Res_Lege").Range("F41:AD41")
属性)而不是 - (Name)
:
ResLegeSheet