VBA等效于hasnext方法?

VBA等效于hasnext方法?,vba,excel,Vba,Excel,VBA是否有与Java.hasnext方法等效的方法 我正在尝试循环浏览excel工作簿中的许多工作表,并打算使用 ActiveSheet.Next.Select 在一个循环中,让我知道任何比这更有效的方法,因为我确信有。提前谢谢 没有等价物,但大多数支持索引的属性都有一个.Count属性,它会告诉您需要迭代多少个索引,但是大多数支持索引的属性都有一个.Count属性,它会告诉您需要迭代多少个我认为VBA与hasnext没有直接的等价关系。如果您想检查集合中是否有对象,可以执行类似于的操作,如

VBA是否有与Java.hasnext方法等效的方法

我正在尝试循环浏览excel工作簿中的许多工作表,并打算使用

ActiveSheet.Next.Select

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

没有等价物,但大多数支持索引的属性都有一个
.Count
属性,它会告诉您需要迭代多少个索引,但是大多数支持索引的属性都有一个
.Count
属性,它会告诉您需要迭代多少个我认为VBA与hasnext没有直接的等价关系。如果您想检查集合中是否有对象,可以执行类似于
的操作,如果colX.Count>0,那么…如果
结束,我认为VBA与hasnext没有直接的等价关系。如果要检查集合中是否有对象,可以执行类似于
的操作,如果colX.Count>0,则…如果结束

对于集合中的每个x使用类似
的循环如何。。。下一个x
?如果到达列表的末尾,它将自动终止。

对集合中的每个x使用类似
的循环怎么样。。。下一个x
?如果到达列表末尾,它将自动终止。

最好的方法是对每个
循环方法使用

以下是一个示例:

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
变量引用循环中的当前工作表。

最好的方法是对每个
循环方法使用

以下是一个示例:

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
变量引用循环中的当前工作表。

如上所述,没有与
等效的。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

如上所述,没有等效的
.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

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

我想展示我最终做了什么,并且代码在回答中更具可读性

我只是使用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

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

我想展示我最终做了什么,并且代码在回答中更具可读性

我只是使用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

最接近HasNext的是检查Next是否为“Nothing”


但我同意其他人的观点,对于每个..Next,避免选择并激活是更好的方法。

最接近HasNext的方法是检查Next是否为“Nothing”


但我同意其他人的观点,即对于每个..下一步,避免选择和激活是更好的方法。

+1循环是方法:)+1循环是方法:)我建议使用@Gimp的方法。它对每个对象都执行相同的操作,这是一种处理对象的强大方法。另外,您应该注意,sheetCount在代码示例中被初始化为变量,而不是整数-
http://www.cpearson.com/excel/DeclaringVariables.aspx
。向下滚动至“注意用一条模糊语句声明的变量”。感谢您发布您的答案。但是,由于VBA不理解您使用的语法,所以您应该将sheetCount设置为Integer,i设置为Integer。另外,只要有可能,您应该尽量避免选择。VBA确实理解“Dim sheetCount,i As Integer”为您自己测试它。为什么要避免选择?我假设这本身就是另一个主题。@MikeKellogg
Dim sheetCount,I As Integer
不会将
sheetCount
作为整数进行标注
Select
在99.9%的时间里是冗余的,因此它会毫无目的地膨胀代码运行时。我建议改用@Gimp的方法。它对每个对象都执行相同的操作,这是一种处理对象的强大方法。另外,您应该注意,sheetCount在代码示例中被初始化为变量,而不是整数-
http://www.cpearson.com/excel/DeclaringVariables.aspx
。向下滚动至“注意用一条模糊语句声明的变量”。感谢您发布您的答案。但是,由于VBA不理解您使用的语法,所以您应该将sheetCount设置为Integer,i设置为Integer。另外,只要有可能,您应该尽量避免选择。VBA确实理解“Dim sheetCount,i As Integer”为您自己测试它。为什么要避免选择?我假设这本身就是另一个主题。@MikeKellogg
Dim sheetCount,I As Integer
不会将
sheetCount
作为整数进行标注<代码>选择
在99.9%的时间内是冗余的,因此它会毫无目的地膨胀代码运行时。