VBA昏暗的工作表(不是工作表)

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

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的工作表对象中。 这是更多的关于试图了解,而不是为了function的目的,而不是任何东西,但是为了function的目的,我试图让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对象的集合

如果你只需要一个你的Workbook Worksheets的集合(不是Charts )被称为像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