VBA 是否与 Java .hasnext 方法等效?
我正在尝试遍历 excel 工作簿中的很多工作表并打算使用
ActiveSheet.Next.Select
在一个循环中,让我知道任何比这更有效的方法,因为我确信有。提前致谢!
最好的方法是使用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
没有等价物,但是大多数支持索引的属性都有一个.Count
属性可以告诉您需要迭代多少
正如上面已经提到的,没有等价于.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
使用像这样的循环怎么样For Each x in Collection ... Next x
?如果到达列表末尾,它会自动终止。
与 HasNext 最接近的是检查 Next 是否为“Nothing”。
Dim sh As Worksheet
Set sh = ActiveSheet
If Not sh.Next Is Nothing Then
Set sh = sh.Next
End If
但我同意其他人的观点,即 For Each..Next 并避免 Select and Activate 是更好的方法。
我不认为 VBA 直接等同于 hasext。如果您想检查一个集合中是否有对象,您可以执行类似的操作If colX.Count > 0 then...end if
所有答案对这个问题都有帮助。
我想展示我最终做了什么,并且代码在答案中更具可读性。
我只是使用count方法并循环直到我的迭代器基本上等于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