VBA相当于hasnext方法?

VBA是否具有与Java .hasnext方法相同的function?

我想通过Excel工作簿中的很多工作表来循环使用

ActiveSheet.Next.Select 

在一个循环内,让我知道任何比这更有效的方法,因为我确定有这个方法。 提前致谢!

没有等价的,但是大多数支持索引的属性都有一个.Count属性,它会告诉你需要迭代多less个属性

最好的办法是使用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的工作表,并允许您使用wksvariables引用循环中的当前工作表。

如上所述,没有.Hasnext等价.Hasnext

您可以使用任何循环遍历工作表。 这是一个For循环的例子

 Sub Sample() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets With ws ' '~~> Your code here ' End With Next End Sub 

如果我想实际实现Hasnexttypes的东西,那么我也可以做到这一点

 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和Activate是更好的select。

我不认为VBA与hasnext直接等价。 如果你想检查一个集合是否有对象,你可以做一些事情If colX.Count > 0 then...end if

所有的答案都对这个问题有帮助。

我想显示我最终做了什么,代码在答案中更具可读性。

我只是使用计数方法,并循环,直到我的迭代器基本等于计数。

 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