複数の値を検索するために検索ボックスを設定しようとしました。複数のワークシートの値を検索し、次のエラーなしエラーの場合
値が見つかると、ワークシートの列が表示されます。 OKをクリックして次のワークシートで検索を続行するか、Cancelをクリックして検索を終了します。私はこの部分が働いていると信じています。
ただし、値が見つからない場合は、すべてのワークシートを検索し、検索の最後にメッセージボックス "Not found"を返すことを願っています。私はそれを行う正しい方法を働かせることはできませんし、 "次のないために"としてエラーメッセージを表示します。
可能であれば、「見つからない」部分(それ以外の部分の後ろ)を修正してください。
Private Sub CommandButton1_Click()
Dim ws As Worksheet
Dim Search As String
Search = TextBox1.Text
For Each ws In ThisWorkbook.Worksheets
Dim r As Range
Dim f1 As Range
If ws.Name = "SELECTOR" Then GoTo nws
Set r = ws.Cells.Find(What:=Search, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) 'finds first match
If Not r Is Nothing Then
Application.Goto (Sheets(ws.Name).Range(r.Address))
If MsgBox("found on " & ws.Name, vbOKCancel) = vbCancel Then
Exit Sub
End If
Set f1 = r
Do While Not r Is Nothing
Set r = ws.Cells.FindNext(r)
If f1.Address = r.Address Then GoTo nws
Application.Goto (Sheets(ws.Name).Range(r.Address))
If MsgBox("found on " & ws.Name, vbOKCancel) = vbCancel Then
Exit Sub
End If
Loop
Else
If MsgBox("not found on " & ws.Name, vbOKCancel) = vbCancel Then
Exit Sub
End If
nws:
Set r1 = Nothing
Next ws
End Sub
こんにちはYowE3k、私はnwsラベルの前にEnd Ifを持っています。別のEnd Ifを追加する必要があるのですか?多くのおかげです。 –
@JDing現在の 'End If'は' If wsName、vbOKCancelで見つからない場合は 'MsgBoxを閉じます= vbCancel Then'ステートメントです。 'If Not r Is Nothing Then'ステートメントを閉じるには余分なものが必要です。私がインデントしたときにコードを見ると、 'Not Not r Is Nothing Then'と' Else'の両方が同じインデントで始まり、 'End If'は同じインデントレベルで開始しません。 – YowE3K
@JDingまた、[Rubberduck](http://rubberduckvba.com)(他の高VBA回答者の1人であるオープンソースのVBIDEアドインプロジェクト)(https:///stackoverflow.com/users/1188513/mats-mug)管理)。それを使用すると、コードのインデントに役立ち、この種の問題を防ぐのに役立ちます。 – YowE3K