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
的工作表,并允许您使用wks
variables引用循环中的当前工作表。
如上所述,没有.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
如果我想实际实现Hasnext
types的东西,那么我也可以做到这一点
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