Excel 2010 VBA - 使用变量的值作为另一个变量

Excel 2010 VBA - Use Value of variable as another variable

这是我在编写 VBA 代码时遵循的做法。 我通常将不带空格的工作表名称设置为变量名称。 例如,我有一个包含 3 个工作表的工作簿,这些工作表的名称如下

1 - Control

2 - 60 W Status

3 - 60 W Status 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

我想知道有没有什么办法可以实现。我们可以将一个变量的值用作另一个变量吗?

您已经可以从工作表集合中按名称引用工作表。

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 脚本运行时的引用才能使用字典。 要添加引用,请转到工具 -> 引用并选中它的框。