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