こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2005-03-10 19:48:03

QNo.1261767

困ってます

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

>画面をスクロールして対象列が正しいのかを確認したい

もちろん、自作 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

投稿日時 - 2005-03-11 09:51:21

お礼

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

投稿日時 - 2005-03-11 18:56:50

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>エクセルの仕様上それはできない

メッセージボックスの仕様です。

自分で同様のフォームを作成して、
UserForm1.Show vbModeless や UserForm1.Show 0
として起動すると、シートの操作が可能になります。

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

投稿日時 - 2005-03-10 20:11:24

お礼

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

投稿日時 - 2005-03-11 18:56:13

あなたにオススメの質問