1

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

我正在尝试遍历 excel 工作簿中的很多工作表并打算使用

ActiveSheet.Next.Select

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

4

7 回答 7

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

于 2012-08-08T13:29:42.710 回答
3

没有等价物,但是大多数支持索引的属性都有一个.Count属性可以告诉您需要迭代多少

于 2012-08-08T13:22:11.087 回答
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
于 2012-08-08T13:38:11.380 回答
1

使用像这样的循环怎么样For Each x in Collection ... Next x?如果到达列表末尾,它会自动终止。

于 2012-08-08T13:26:01.773 回答
1

与 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 是更好的方法。

于 2012-08-08T15:50:38.770 回答
0

我不认为 VBA 直接等同于 hasext。如果您想检查一个集合中是否有对象,您可以执行类似的操作If colX.Count > 0 then...end if

于 2012-08-08T13:22:41.430 回答
0

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

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

我只是使用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
于 2012-08-08T13:40:14.700 回答