• ベストアンサー

エクセルVBAによりメッセージボックスを表示させた場合について

お世話になっております。 エクセルVBAにより、メッセージボックスを表示させた場合についてお尋ねいたします。 マクロ上にて、にある項目をINPUTBOXにて対象の列を選択して、それをMSGBOXにて”はい”もしくは”いいえ”にて確認する形式にしているのですが、選択した列が画面上見えない場合もあるのですが、その場合画面をスクロールして対象列が正しいのかを確認したいのですが、MSGBOXがアクティブになっており、スクロールさせる事ができなくて 困っております。そもそもできるのかどうかすら わからないので、エクセルの仕様上それはできないのであれば、しょうがないのですが、もし可能であれば ご教授ください。 宜しくお願い致します。

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

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

>画面をスクロールして対象列が正しいのかを確認したい もちろん、自作 Msgbox フォームを作って Modeless 表示してもよいのですが、手間がかかりますね。 今回の件では、「入力のときにスクロールできれば、確認しながら選択できるのでOK」みたいです。それでしたら、 1. Input関数ではなく、Inputメソッドの Type:=8 を使う 2. UserFormなら RefEditコントロール を使う でクリアできそうです。サンプルコードを示しますが、長いのはコードの中に解説を書いているためですから、とりあえず、コピー&ペーストして動作させて見て下さい。 入力のときに、スクロールさせて確認できます。 Sub Sample() InputColumn:   '入力--------------------------------------------------------   'Inputメソッドを利用   '[キャンセル]ボタン--> Nothing になるので Setステートメントで   'エラーが発生する。そこで On Error Resume Next でエラーが発生   'しても処理を続行させる   '------------------------------------------------------------   On Error Resume Next   Set rngCol = Application.InputBox( _     Prompt:="列を選択します", Type:=8)   If rngCol Is Nothing Then Exit Sub   On Error GoTo 0   '正しくRangeがかえされた場合、複数範囲判定 --------------------   '判定方法1:rngCol.Addressの値にカンマが含まれれば連続していない   '判定方法2:rngCol.Columns.Count>1 なら複数列を選択している   '------------------------------------------------------------   If InStr(1, rngCol.Address, ",") > 0 _     Or rngCol.Columns.Count > 1 Then     MsgBox "複数範囲が選択されています", vbCritical, "中止"     Set rngCol = Nothing     GoTo InputColumn '再入力へ   Else     Set rngCol = Columns(rngCol.Column)   End If   '確認 -------------------------------------------------------   '列全体を選択   rngCol.Select   '確認メッセージ   intRes = MsgBox("この列でよろしいですか?", _     vbYesNoCancel + vbInformation, "確認")   Select Case intRes     Case Is = vbNo       Set rngCol = Nothing       GoTo InputColumn '再入力へ     Case Is = vbCancel       Set rngCol = Nothing       Exit Sub '終了     Case Else   End Select   'それ以降の   MsgBox "選択されたのは" & vbCrLf & _     "列:" & rngCol.Address & vbCrLf & _     "列番号:" & rngCol.Column End Sub

nabeo1
質問者

お礼

ありがとうございます。 ご丁寧に解説及びソースまで書いていただき 大変助かりました。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>エクセルの仕様上それはできない メッセージボックスの仕様です。 自分で同様のフォームを作成して、 UserForm1.Show vbModeless や UserForm1.Show 0 として起動すると、シートの操作が可能になります。

参考URL:
http://park11.wakwak.com/~miko/Excel_Note/11-01_userform.htm#11-01-13
nabeo1
質問者

お礼

ありがとうございます。 おかげで、スクロールする事ができました。 作業のほうもおかけで、効率よく行う事が できます。

関連するQ&A