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

すでに上で述べたように、同等のものはありません.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 に答える
3

同等のものはありませんが、インデックスをサポートするほとんどのプロパティには、.Count反復する必要がある数を示すプロパティがあります

于 2012-08-08T13:22:11.087 に答える
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 と 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 に答える