这是我在编写VBA代码时遵循的做法。 我通常将没有空格的工作表名称设置为变量名称。 例如,我有一个包含3个工作表的工作簿,其名称为
1 - 控制
2 - 60 W状态
3 - 60 W状态Pvt Tbl
我通常按以下方式将工作表名称设置为工作表变量:
Set wb = thisworkbook
Set wsControl = wb.sheets("Control")
Set ws60WStatus = wb.sheets("60 W Status")
Set ws60WStatusPvtTbl = wb.sheets("60 W Status Pvt Tbl")
现在我想使这个动态意义我的代码应循环遍历工作簿中的所有工作表,并将没有空格的工作表名称存储到变量名称中,如ws *
到目前为止,我有以下代码:
Sub GetwsNames()
Set wb = thisworkbook
Dim wsNames()
i = 0
'Loop through the workbook and store the names as wsName in an array
For each ws in worksheets
Redim Preserve wsNames(i)
Var1 = ws.Name
Var2 = Replace(ws.Name," ", "")
Var3 = "ws" & Var2
wsNames(i) = Var3
i = i + 1
Next
'Loop through array wsNames() and assign each element to corresponding workbook names
'For example
'Set wsControl = wb.sheets("Control")
'Set ws60WStatus = wb.Sheets("60 W Status")
'Set ws60WStatusPvtTbl = wb.sheets("60 W Status Pvt Tbl")
End Sub
我想知道是否有办法实现这一目标。我们可以将变量的值用作另一个变量吗?
答案 0 :(得分:0)
您已经可以从工作表集合中按名称引用工作表。
Worksheets("Sheet 1")
如果您想要通过修改后的名称引用它们,那么创建数组或字典将会很有效。我建议使用字典。它允许您按键引用项目。在此示例中,我使用修改后的名称作为键,并使用工作表对象作为项目。
Dim myWorksheets As Scripting.Dictionary
Set myWorksheets = New Scripting.Dictionary
Dim ws As worksheet
For Each ws In ThisWorkbook.Worksheets
Dim modifiedName As String
modifiedName = "ws" & Replace(ws.Name, " ", "")
myWorksheets.Add modifiedName, ws
Next
'You can now reference the worksheets by the modified names, through the dictionary
myWorksheets("wsControl").Cells(1, 1) = "Hi"
myWorksheets("ws60WStatus").Cells(1, 1) = "there"
myWorksheets("ws60WStatusPvtTbl").Cells(1, 1) = "world."
请注意,您需要添加对MS Scripting运行时的引用才能使用词典。 要添加引用,请转到“工具” - >“参考”并选中其框。