我有一个vba宏(2010),当点击一个按钮时,将填写新年,并更新选项卡名称和数据中所有年份的年份以匹配新年。由于我是新手,我已将所有这些硬编码到每张纸的特定标题中。这意味着该按钮仅在下标超出范围错误之前工作一次,因为工作表已更改标题。
有没有办法可以使用数组或其他东西来避免对标题进行硬编码,但仍然会更改标题中的年份,以便将来可以重用此代码?
我有:
For Each xlwksht In ActiveWorkbook.Worksheets( _
Array("FY15 GM Forecast (AMSG) Total", "FY15 GM Forecast (US)", _
"FY15 GM Forecast (MCU)", "FY15 GM Forecast (PDSN)"))
xlwksht.Activate
::do something here::
Next xlwksht
当我运行此操作以查看我是否在正确的轨道上时,我收到运行时错误' 91' - 对象变量或未设置块。我不确定如何设置变量以及是否需要计数。我所尝试的还没有成功。
感谢。
答案 0 :(得分:0)
Sub Test()
Dim xlwksht As Worksheet
For Each xlwksht In ActiveWorkbook.Worksheets(Array(1, 2, 3))
xlwksht.Activate
MsgBox ("Index:" & xlwksht.Index & vbCrLf & "Name: " & xlwksht.Name)
Next xlwksht
End Sub
答案 1 :(得分:0)
使用不会发生变化的CodeName
- it is a read-only property of the worksheet class - 与索引位置不同,如果您重新整理工作表,可以删除一些,等等。)
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets(Array(Sheet1.Name, Sheet2.Name))
Debug.Print ws.Name
ws.Activate
'etc.
Next
如果一张或多张工作表已从工作簿中删除,这当然会引发错误,但无论您对其名称或工作簿中的相对位置如何操作,它都会有效