• ベストアンサー

エクセルVBA

先日、機会がありまして、N社の「ExcelVBA」実践技&上級大全C&R研究所著を購入しました。この中で、もしよろしければ、教えて頂きたいのですが、 INPUTOBOX関数のダイアログボックスが画面に表示されますが、「キャンセル」ボタンを押しても、画面が消えません。キャンセルが効きません。内容は次の とおりです。 Sub ParamOutputData() Dim strKeyword As String Dim strJouken As String strKeyword = InputBox("検索したい住所の一部を入力してください。") Do While strKeyword = "" strKeyword = InputBox("値が入力されていません。" & vbCrLf & _ "検索したい住所の一部を入力してください。") Loop strJouken = "*" & strKeyword & "*" Application.ScreenUpdating = False Sheets("Sheet2").Activate Cells.Clear With Sheets("Sheet1") .Range("A3").AutoFilter Field:=4, _ Criteria1:=strJouken .Range("A3").CurrentRegion.Copy _ Destination:=Sheets("Sheet2").Range("A3") .Range("A3").AutoFilter End With Sheets("Sheet2").Columns("A:F").AutoFit Application.ScreenUpdating = True End Sub 以上です。実は、上記のマクロを参考に仕事に活用できたらと、今、学習中です。ある程度、完成に近づきましたが、例の「キャンセル」ボタンだけがうまくいきません。何とかキャンセルを効かせたいのですが、 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

#1です。すみません。間違えました。寝ぼけてました。 strKeyword = InputBox("検索したい住所の一部を入力してください。") If strKeyword = "" Then   Exit Sub End If strJouken = "*" & strKeyword & "*" ループで入力を強制するよりも、キャンセルできるようにコーディングした方が良いでしょうね。

con-con
質問者

お礼

KenKen_SP さんへ 時間を見ましたら、23:43分とあります。 遅い時間にもかかわらず、ご親切に有り難うございました。キャンセルという方法があることを勉強しました。これからも、いろいろご指導よろしくお願いします。

その他の回答 (4)

  • Dainty
  • ベストアンサー率45% (27/59)
回答No.5

#2です。 Inputboxには、Inputbox関数とInputboxメソッドがあります。con-conさんの使用されているのがInputbox関数で、入力なしでOKをクリックした場合も、キャンセルをクリックした場合も""が返ります。 今回のように、未入力でOKをクリックした場合は入力を促して、キャンセルをクリックした場合は処理を中断する場合はInputboxメソッドを使います。キャンセルをクリックするとFalseが返ります。 strKeyword = Application.InputBox(Prompt:="検索したい住所の一部を入力してください。") If strKeyword = "False" Then Exit Sub   'キャンセルの場合 Else Do While strKeyword = "" strKeyword = Application.InputBox(Prompt:="値が入力されていません。" & vbCrLf & _ "検索したい住所の一部を入力してください。") Loop End If Inputboxの前にApplication.をつけるのがミソです。

con-con
質問者

お礼

早速のご回答有り難うございます。 大変参考になりました。 Inputbox関数とInputboxメソッドの違いというか、 役割が良く分かりました。 お忙しいところ、本当に有り難うございました。 今後とも、どうぞよろしくお願いします。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。 Do While strKeyword = "" strKeyword = InputBox("値が入力されていません。" & vbCrLf & _ "検索したい住所の一部を入力してください。") Loop このDo~Loopを If strKeyword = "" Then Exit Sub この1行に代えます。 以上です。

con-con
質問者

お礼

con-conです。taocatさん、早速の「If strKeyword = "" Then Exit Sub」の貴重なアドバイス本当に嬉しいです。これから、早速やってみようと思います。

  • Dainty
  • ベストアンサー率45% (27/59)
回答No.2

Do-While文は条件が成立している間、Do-While~Loopまでの処理を繰り返します。 Inputboxに何も入力されず「OK」を押されたときを想定して strKeyword = "" という条件にしているのだと思いますが、キャンセルをクリックした時も strKeyword = "" になってしまうので、Do-Whileから抜け出すことができません。 

con-con
質問者

お礼

Daintyさんへ con-conです。夜遅い時間で、本当にすみません。 「Do-Whileから抜け出すことができません。」の ご回答よく分かりました。キャンセルをクリック しても効かない理由がわかりました。 今後とも、いろいろアドバイスをお願いします。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

Do While strKeyword <> "" または Do Until strKeyword = "" です。

関連するQ&A

専門家に質問してみよう