激活名称为变量结果的工作表

时间:2016-06-03 02:42:40

标签: excel vba excel-vba

Sub updateCells()

'使用存储在列中几个单元格的当前选择列表中的工作表名称来迭代工作表进行更新

Set sheetList = Selection

For i = 1 To sheetList.Count
Workbooks("myfile.xlsm").Sheets(sheetlist(i)).Activate
'[perform some update operations]
Next i

End Sub

'这会在.activate行上出现错误,该行与sheetlist(i)有关,因为当我将sheetlist(i)更改为工作表的实际名称" mysheet&#时34;然后代码工作。我究竟做错了什么?任何建议表示赞赏。

3 个答案:

答案 0 :(得分:0)

在这里,sheetlist是一个范围,sheetlist(i)将给出该范围的单元格。要获得单元格的值,您必须使用以下任一项:

  • 。文本
  • 。价值
  • .Value2

所以你的代码改为:

Sub updateCells()
    'iterate through sheets to update using the sheet names stored in a list in the current selection of several cells in a column

    Set sheetlist = Selection

    For i = 1 To sheetlist.Count
        Workbooks("myfile.xlsm").Sheets(sheetlist(i).Value).Activate
        '[perform some update operations]
    Next i

End Sub

我在上面的代码中使用了单元格的Value属性。

你也可以在Sub上面写上:

Sub updateCells()
    Set sheetlist = Selection

    For Each cell In sheetlist
        ThisWorkbook.Sheets(cell.Value).Activate
        '[perform some update operations]
    Next
End Sub

答案 1 :(得分:0)

Selection会返回Range个对象。

引用它的各个部分的正确方法是使用Range.Item属性,如下所示:

Workbooks("myfile.xlsm").Sheets(sheetlist.Item(i).Value).Activate

答案 2 :(得分:0)

非常感谢所有提出建议的人。我很感激这个建议。事实证明另一个解决方案是稍微修改我的代码以强制使用cstr()返回字符串,如下所示:

Workbooks("mybook.xlsm").Sheets(CStr(sheetList(i))).Activate  

与往常一样,有许多方法可以在VBA中为猫咪涂抹皮肤。