将多个工作表声明为变量

问题描述 投票:1回答:3

我正在尝试以这种方式为工作表声明一些变量

Dim e
For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    Set wsData = ThisWorkbook.Worksheets(e)
Next e

是否可以使用1d数组声明所有工作表..?如果没有,是否有解决此问题的明智方法?示例wsData引用工作表“数据”和wsCL引用工作表“ CL”,依此类推。

excel vba
3个回答
1
投票

工作表数组

The代码

Option Explicit

Sub WorksheetGroup()
    Dim wsArray As Variant, wsData As Variant, i As Long
    wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
    wsData = getWorksheets(wsArray)
    ' e.g.
    For i = 0 To UBound(wsData)
        Debug.Print wsData(i).Name
    Next i
End Sub

Function getWorksheets(wsArray As Variant) As Variant
    Dim wsData As Variant, ws As Variant, i As Long
    ReDim wsData(UBound(wsArray))
    For Each ws In wsArray
        Set wsData(i) = ThisWorkbook.Worksheets(ws)
        i = i + 1
    Next ws
    getWorksheets = wsData
End Function

Helper Sub

Sub AddSheets()
    Dim e As Variant
    For Each e In Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _
      "E5", "STP", "STF", "RH", "CR", "MC", "AW")
        ThisWorkbook.Worksheets.Add , ActiveSheet
        ActiveSheet.Name = e
    Next e
End Sub

编辑

[收藏集版本

主要区别在于您必须使用Set,必须使用Add,所以您不需要i并且集合是基于[[one-based。]

Sub WorksheetGroupColl() Dim wsArray, wsColl As Collection, i As Long wsArray = Array("Data", "CL", "SE", "GE", "E1", "E2", "E3", "E4", _ "E5", "STP", "STF", "RH", "CR", "MC", "AW") Set wsColl = getWorksheetsColl(wsArray) ' e.g. For i = 1 To wsColl.Count Debug.Print wsColl(i).Name Next i End Sub Function getWorksheetsColl(wsArray As Variant) As Collection Dim wsColl As New Collection, ws As Variant For Each ws In wsArray wsColl.Add ThisWorkbook.Worksheets(ws) ' There are more parameters. Next ws Set getWorksheetsColl = wsColl End Function

1
投票
您可以像这样循环遍历内置的Worksheets集合...

Worksheets

您也可以使用For each e in ThisWorkbook.Worksheets
    'Now e represents a workbook object with each iteration
    Debug.Print e.Name
Next e
而不是Sheets

如果需要,您也可以使用Worksheets循环,就像这样...

For...Next


1
投票
VBA中不能有变量变量名。但是,您可以做的是使用代号引用工作表。例如:

For e = 1 to ThisWorkbook.Worksheets.Count Debug.Print ThisWorkbook.Worksheets(e).Name Next e

现在,Excel通常以“ Sheet1”,“ Sheet2”的形式将代码名分配给工作表。等等。您想要做的就是将这些代码名更改为所需的名称,以便您可以将它们引用为要更改它们,可以运行如下循环:

with wsData 'code end with

这将导致工作表“数据”可以被称为“ wsData”,工作表CL可以被称为“ wsCL”,依此类推。

注意:这假设您的图纸已经创建。如果不是,那么您需要先创建它们,然后再运行此代码。

© www.soinside.com 2019 - 2024. All rights reserved.