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;然后代码工作。我究竟做错了什么?任何建议表示赞赏。
答案 0 :(得分:0)
在这里,sheetlist
是一个范围,sheetlist(i)
将给出该范围的单元格。要获得单元格的值,您必须使用以下任一项:
所以你的代码改为:
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中为猫咪涂抹皮肤。