1

「REQM」(引用符なし) の列を検索し、見つかったセルの範囲を d に設定する検索を実行しようとしています。次に、データを入力する場所を見つける別のサブ関数を呼び出します。私のFindEntryAreaサブ関数は正常に機能し、最初の検索はうまく機能しますが、次を見つけようとすると正しく機能しません。

Sub FindLoop()
Dim re as Range
Set re = Sheets(1).Range("T:T")

With re
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
    MsgBox (d.Row)
    Call FindEntryArea
    Do
        Set d = .FindNext(d)
        MsgBox (d.Row)
        Call FindEntryArea
    Loop While Not d Is Nothing
End With


End Sub

エラーを把握しようとして、msgbox を使用して見つかった範囲の行を出力しました。これは最初のセルでは正常に機能しましたが、findnext では機能しませんでした。オブジェクト変数を取得するか、ブロック変数が設定されていません。私はVBAを初めて使用し、findnextを使用するのはこれが初めてなので、ガイダンスをいただければ幸いです。また、re は私の範囲であり、その範囲内にあるはずの他のセルがたくさんあります。

ありがとう。

編集:

メインコードとfindloop

Public re As Range
Public d As variant
Sub MainCode()

Dim r as Range
Set re = Worksheets("Summary all PIIDB").Range("T:T")

Set r = Worksheets("Summary all PIIDB")
With r
    Call FindLoop
End With
End Sub

Sub FindLoop()

With re
    Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
    MsgBox (d.Row)
    'Call FindEntryArea
        Set d = .FindNext(d)
        MsgBox (d.Row)
        'Call FindEntryArea
End With


End Sub

findnext を最初に機能させるためだけにループを削除しましたが、まだ苦労しています。

4

1 に答える 1

1

問題は、変数「re」または「c」を何にも設定しないことです。バグを減らすために、変数を使用する前にすべての変数を宣言する必要があります。次のようなことを試してください:

Sub FindLoop()
    Dim prevSheet as Worksheet
    Dim rng As Range
    Dim fnd As Variant
    Dim i As Long

    prevSheet = ActiveSheet
    Sheets(1).Select

    'Column T - UsedRange
    Set rng = Sheets(1).Range(Cells(1, 20), Cells(ActiveSheet.UsedRange.Rows.Count, 20))

    On Error GoTo Not_Found
    i = rng.Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole).Row
    On Error GoTo 0

    With rng
        Set fnd = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
        Do
            Set fnd = .FindNext(fnd)
            Call FindEntryArea
            MsgBox (fnd.Row)
        Loop While i < fnd.Row
    End With
    prevSheet .select

    Exit Sub

Not_Found:
    MsgBox """REQM"" not found."
    prevSheet.Select
    Exit Sub
End Sub

編集:あなたが投稿したコードを修正したところ、正しく動作しました。

Option Explicit
Public d As Variant
Public re As Range

Sub MainCode()

    Dim r As Range
    Set re = Worksheets("Summary all PIIDB").Range("T:T")

    Set r = Worksheets("Summary all PIIDB").UsedRange
    With r
        Call FindLoop
    End With
End Sub

Sub FindLoop()
    On Error GoTo Not_Found
    With re
        Set d = .Find("REQM", LookIn:=xlFormulas, LookAt:=xlWhole)
        MsgBox (d.row)
        'Call FindEntryArea
        Set d = .FindNext(d)
        MsgBox (d.row)
        'Call FindEntryArea
    End With
    On Error GoTo 0
    Exit Sub

Not_Found:
    MsgBox ("REQM not found!")
    Exit Sub
End Sub
于 2013-06-10T14:01:10.997 に答える