- ベストアンサー
エクセルVBAによりメッセージボックスを表示させた場合について
お世話になっております。 エクセルVBAにより、メッセージボックスを表示させた場合についてお尋ねいたします。 マクロ上にて、にある項目をINPUTBOXにて対象の列を選択して、それをMSGBOXにて”はい”もしくは”いいえ”にて確認する形式にしているのですが、選択した列が画面上見えない場合もあるのですが、その場合画面をスクロールして対象列が正しいのかを確認したいのですが、MSGBOXがアクティブになっており、スクロールさせる事ができなくて 困っております。そもそもできるのかどうかすら わからないので、エクセルの仕様上それはできないのであれば、しょうがないのですが、もし可能であれば ご教授ください。 宜しくお願い致します。
- みんなの回答 (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
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>エクセルの仕様上それはできない メッセージボックスの仕様です。 自分で同様のフォームを作成して、 UserForm1.Show vbModeless や UserForm1.Show 0 として起動すると、シートの操作が可能になります。
お礼
ありがとうございます。 おかげで、スクロールする事ができました。 作業のほうもおかけで、効率よく行う事が できます。
お礼
ありがとうございます。 ご丁寧に解説及びソースまで書いていただき 大変助かりました。