|
こんにちは。かみちゃん です。
>部分的なキーワードで検索したいので、商品がいくつかHitした時に順番に見ていって、目的の商品が出た時にボタンで処理を分岐させたいのです。(次を検索するか/検索を終了するか)。
>目的の商品がメッセージで出た時にボタンを押すと検索を終了してF列をアクティブにしたいと考えているのですが、その後も余計に検索してしまいますのでどうしたらよいのか、と。
もしかして、以下のようなコードにしたらいかがでしょうか?
Sub Sample2()
Dim mystr As String
Dim myrange As Range
Dim myadrs As String
Dim myans As Integer
mystr = Application.InputBox("品名入力")
If mystr = "false" Then
Exit Sub
End If
With Range("A1:A10000")
Set myrange = .Find(mystr, .Cells(.Rows.Count))
End With
If myrange Is Nothing Then
MsgBox "該当なし"
Else
myadrs = myrange.Address
Do
' myans = MsgBox("検索します", vbOKCancel + vbInformation)
' MsgBox myrange.Offset(0, 0).Value, vbOKCancel
myans = MsgBox("次のものが検索されました。検索を続けます。" & vbCrLf & " " & myrange.Offset(0, 0).Value, vbOKCancel + vbInformation)
If myans = vbCancel Then
myrange.Offset(0, 5).Select
Exit Sub
' Else
' myrange.Offset(0, 5).Select
End If
Set myrange = Range("A1:A10000").FindNext(myrange)
Loop Until myrange.Address = myadrs
MsgBox "最後まで検索しました"
End If
End Sub
要するに、
myans = MsgBox("検索します", vbOKCancel + vbInformation)
MsgBox myrange.Offset(0, 0).Value, vbOKCancel
と2回MsgBoxが表示され、1回目の「検索します」で毎回「OK」をクリックして
いるのではないでしょうか?
そうすると、
If myans = vbCancel Then
ではなくなり、「その後も検索」します。
また、
MsgBox myrange.Offset(0, 0).Value, vbOKCancel
で、目的の商品だった場合、「キャンセル」をクリックするのだと思いますが、
変数myansに代入していないから、
If myans = vbCancel Then
が効いていないということです。
上記コードは、その部分を修正した内容にしていますので、ご確認ください。
|
|