简体   繁体   English

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

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

OK so, I know I can do this: 好的,我知道我可以这样做:

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

and then do my fancy stuff with the ws worksheet object 然后用ws工作表对象做我喜欢的东西

I also know I can Dim wss as worksheets and that using worksheets("Sheet1") returns the worksheet object. 我也知道我可以将Dim wss as worksheets并使用worksheets("Sheet1")返回工作表对象。 So why doesn't the following work? 那么为什么以下工作呢?

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

I've also tried: 我也尝试过:

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

but the latter just looks like I'm trying to rename/shorten "worksheets" which seems totally wrong. 但后者只是看起来我试图重命名/缩短“工作表”,这似乎是完全错误的。 I'm trying to get the worksheets of a workbook in to one worksheets object called wss. 我正在尝试将工作簿的工作表放到一个名为wss的工作表对象中。 This is more about trying to understand the heirachy than anything but for functional purposes I'm trying to get wss to encompass all worksheets from workbook x so I could just do ws = wss(1) instead of saying set ws = wb.worksheets(1) 这更多的是试图理解heirachy而不是为了功能目的我试图让wss包含来自工作簿x的所有工作表,所以我可以做ws = wss(1)而不是说set ws = wb.worksheets(1)

Is that even possible or am I misunderstanding the worksheets/ worksheet relationship? 这是可能的还是我误解了工作表/工作表的关系?

you must declare wss as a Sheets object 你必须将wss声明为Sheets对象

Dim wss As Sheets
Dim ws As Worksheet

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

this is because Worksheets property of Workbook object returns a Sheets collection, ie a collection that contains both Worksheets and Charts object of the workbook 这是因为Workbook对象的Worksheets属性返回Sheets集合,即包含Worksheets簿的WorksheetsCharts对象的集合

Should you need a collection of your Workbook Worksheets only (not Charts ) to be called like ws = wss(1) or the likes then you could adopt the following workaround with Collection object 如果您只需要(或不是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