使用数组更改数据而不将硬编码转换为工作表标题

时间:2014-08-14 20:24:19

标签: excel excel-vba vba

我有一个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' - 对象变量或未设置块。我不确定如何设置变量以及是否需要计数。我所尝试的还没有成功。

感谢。

2 个答案:

答案 0 :(得分:0)

使用Worksheets(index)属性

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

如果一张或多张工作表已从工作簿中删除,这当然会引发错误,但无论您对其名称或工作簿中的相对位置如何操作,它都会有效