Excel 2010 VBA – 使用variables的值作为另一个variables

编写VBA代码时,这是我遵循的做法。 我通常将无空格的工作表名称设置为variables名称。 例如,我有一个带有3个工作表的工作簿,其名称如下

1 – 控制

2 – 60瓦状态

3 – 60瓦状态Pvt Tbl

我通常以下列方式将工作表名称设置为工作表variables:

Set wb = thisworkbook Set wsControl = wb.sheets("Control") Set ws60WStatus = wb.sheets("60 W Status") Set ws60WStatusPvtTbl = wb.sheets("60 W Status Pvt Tbl") 

现在我想使这个dynamic的含义,我的代码应该遍历工作簿中的所有工作表,并将工作表名称不带空格存储到variables名称,如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 

我想知道是否有办法做到这一点。 我们可以使用variables的值作为另一个variables吗?

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

 Worksheets("Sheet 1") 

如果您不想通过修改后的名称来引用它们,那么创build一个数组或字典将会很好。 我build议使用字典。 它将允许您通过键参考项目。 在这个例子中,我使用修改的名称作为键,并使用工作表对象作为项目。

 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运行时的引用才能使用字典。 要添加参考,请转至工具 – >参考并选中其框。