繁体   English   中英

VBA暗淡作为工作表(不是工作表)

[英]VBA dim ws as worksheets (not worksheet)

好的,我知道我可以这样做:

Dim ws as worksheet
Set ws = thisworkbook.worksheets("Sheet1")

然后用ws工作表对象做我喜欢的东西

我也知道我可以将Dim wss as worksheets并使用worksheets("Sheet1")返回工作表对象。 那么为什么以下工作呢?

Dim wss as worksheets
Dim ws as worksheet
Set wss = thisworkbook.worksheets
Set ws = wss("Sheet1")

我也尝试过:

Dim wss as worksheets
Dim ws as worksheet
Set ws = thisworkbook.wss("Sheet1")

但后者只是看起来我试图重命名/缩短“工作表”,这似乎是完全错误的。 我正在尝试将工作簿的工作表放到一个名为wss的工作表对象中。 这更多的是试图理解heirachy而不是为了功能目的我试图让wss包含来自工作簿x的所有工作表,所以我可以做ws = wss(1)而不是说set ws = wb.worksheets(1)

这是可能的还是我误解了工作表/工作表的关系?

你必须将wss声明为Sheets对象

Dim wss As Sheets
Dim ws As Worksheet

Set wss = ThisWorkbook.Worksheets
Set ws = wss("Sheet1")

这是因为Workbook对象的Worksheets属性返回Sheets集合,即包含Worksheets簿的WorksheetsCharts对象的集合

如果您只需要(或不是Charts )的Workbook Worksheets集合来调用ws = wss(1)或者喜欢的那样,那么您可以采用以下与Collection对象的解决方法

Option Explicit

Sub main()
    Dim wss As Collection
    Dim ws As Worksheet

    Set wss = GetWorkSheets
    Set ws = wss("Sheet1")
    Set ws = wss(1)
End Sub

Function GetWorkSheets() As Collection
    Dim wss As New Collection
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        wss.add ws, ws.Name
    Next ws
    Set GetWorkSheets = wss
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM