VBA相当于hasnext方法?

时间:2012-08-08 13:17:22

标签: excel vba excel-vba

VBA是否与Java .hasnext方法等效?

我正在尝试遍历excel工作簿中的大量工作表,并打算使用

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

7 个答案:

答案 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