jam*_*art 9 excel vba excel-vba
好的,我知道我可以这样做:
Dim ws as worksheet
Set ws = thisworkbook.worksheets("Sheet1")
Run Code Online (Sandbox Code Playgroud)
然后用ws工作表对象做我喜欢的东西
我也知道我可以Dim wss as worksheets使用worksheets("Sheet1")返回工作表对象.那么为什么以下工作呢?
Dim wss as worksheets
Dim ws as worksheet
Set wss = thisworkbook.worksheets
Set ws = wss("Sheet1")
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
Dim wss as worksheets
Dim ws as worksheet
Set ws = thisworkbook.wss("Sheet1")
Run Code Online (Sandbox Code Playgroud)
但后者只是看起来我试图重命名/缩短"工作表",这似乎是完全错误的.我正在尝试将工作簿的工作表放到一个名为wss的工作表对象中.这更多的是试图理解heirachy而不是为了功能目的我试图让wss包含来自工作簿x的所有工作表所以我可以做ws = wss(1)而不是说set ws = wb.worksheets(1)
这是可能的还是我误解了工作表/工作表的关系?
use*_*756 12
您必须声明wss为Sheets对象
Dim wss As Sheets
Dim ws As Worksheet
Set wss = ThisWorkbook.Worksheets
Set ws = wss("Sheet1")
Run Code Online (Sandbox Code Playgroud)
这是因为对象的Worksheets属性Workbook返回一个Sheets集合,即包含工作簿的两者Worksheets和Charts对象的集合
如果你需要一个你的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
Run Code Online (Sandbox Code Playgroud)