簡體   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