【问题标题】:Create array of worksheets not variant创建工作表数组而不是变体
【发布时间】:2019-06-02 22:53:19
【问题描述】:

我想创建一个工作表类型的数组,而不是变量,然后使用 Array 函数填充数组,最后将数组传递给 worksheet.copy 函数以在数组变量中创建一个新的工作表工作簿。

以下代码有效,但没有一个数组属于工作表类型,其中两个示例数组填充了工作表名称。

Dim wbkThis         As Workbook
Dim wstX            As Worksheet
Dim wstY            As Worksheet
Dim wstZ            As Worksheet
Dim arrWSA          As Variant
Dim arrWSB()        As Variant
Dim arrWSC(1 To 3)  As Variant

Cancel = True

Set wbkThis = ThisWorkbook
Set wstX = wbkThis.Worksheets("SheetX")
Set wstY = wbkThis.Worksheets("SheetY")
Set wstZ = wbkThis.Worksheets("SheetZ")
ReDim arrWSA(1 To 3) As Variant
ReDim arrWSB(1 To 3) As Variant

arrWSA = Array(wstX, wstY, wstZ)
arrWSB = Array(wstX.Name, wstY.Name, wstZ.Name)
arrWSC(1) = wstX.Name
arrWSC(2) = wstY.Name
arrWSC(3) = wstZ.Name

arrWSA(1).Copy
Worksheets(arrWSB()).Copy
Worksheets(arrWSC()).Copy

【问题讨论】:

  • Worksheets 已经是工作表的集合,为什么不使用呢?

标签: arrays excel vba


【解决方案1】:

虽然您可以创建一组工作表,但一次复制它们是行不通的(尽管您可以循环复制它们)。如果您想一次复制多张工作表,则可以使用一组名称。

Sub CopySheets()
    Dim shtCount As Long: shtCount = Worksheets.Count
    Dim X As Long

    Dim arrSheets() As Worksheet: ReDim arrSheets(1 To shtCount)

    For X = LBound(arrSheets) To UBound(arrSheets)
        Set arrSheets(X) = Worksheets(X)
    Next X

'    Worksheets(arrSheets).Copy After:=Worksheets(shtCount) 'This won't work.

    For X = LBound(arrSheets) To UBound(arrSheets)
        arrSheets(X).Copy After:=Worksheets(shtCount) 'this will
    Next X


    Dim arrShtNames() As String: ReDim arrShtNames(1 To shtCount)
    For X = LBound(arrShtNames) To UBound(arrShtNames)
        arrShtNames(X) = Worksheets(X).Name
    Next X

    Worksheets(arrShtNames).Copy After:=Worksheets(shtCount) 'this will as well

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    相关资源
    最近更新 更多