VBA是否与Java .hasnext方法等效?
我正在尝试遍历excel工作簿中的大量工作表,并打算使用
ActiveSheet.Next.Select
在一个循环中,让我知道任何比这更有效的方法,因为我确信有。提前谢谢!
答案 0 :(得分:7)
执行此操作的最佳方法是使用For Each
循环方法。
以下是一个示例:
Dim wks As Worksheet
'- Begin looping through workbook
For Each wks In ActiveWorkbook.Worksheets
'- Do code with each worksheet
msgbox wks.name
next wks
在VBA中,它循环遍历ActiveWorkbook
中的工作表,并允许您使用wks
变量引用循环中的当前工作表。
答案 1 :(得分:3)
没有等价物,但大多数支持索引的属性都有.Count
属性,可以告诉您需要迭代的数量
答案 2 :(得分:3)
如上所述,没有相当于.Hasnext
您可以使用任何循环遍历工作表。这是For循环示例
Sub Sample()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
With ws
'
'~~> Your code here
'
End With
Next
End Sub
如果我想实际实现Hasnext
类,那么我也可以这样做
Sub Sample()
If Hasnext(ActiveSheet.Index + 1) Then
MsgBox Sheets(ActiveSheet.Index + 1).Name
End If
End Sub
Function Hasnext(numb As Long) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Sheets(numb)
On Error GoTo 0
If Not ws Is Nothing Then Hasnext= True
End Function
答案 3 :(得分:1)
使用类似For Each x in Collection ... Next x
的循环怎么样?如果到达列表末尾,它会自动终止。
答案 4 :(得分:1)
最接近HasNext的是检查Next是否为“Nothing”。
Dim sh As Worksheet
Set sh = ActiveSheet
If Not sh.Next Is Nothing Then
Set sh = sh.Next
End If
但我同意其他人的意见。对于每一个......接下来并避免选择和激活是更好的方法。
答案 5 :(得分:0)
我认为VBA与hasnext没有直接的对应关系。如果您想检查集合中是否包含对象,您可以执行If colX.Count > 0 then...end if
答案 6 :(得分:0)
所有答案都对这个问题很有帮助。
我想展示我最终做的事情,代码在答案中更具可读性。
我只是使用count方法并循环,直到我的迭代器基本上等于计数。
Sub Total_Sheet_Compiler()
Dim sheetCount, i As Integer
sheetCount = ActiveWorkbook.Sheets.Count
i = 1
Sheets("Sheet1").Select
Do Until i = sheetCount
ActiveSheet.Next.Select
i = i + 1
Loop
End Sub