[英]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
簿的Worksheets
和Charts
对象的集合
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.