dポイントプレゼントキャンペーン実施中!

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/11 18:56

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



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

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

参考URL:http://park11.wakwak.com/~miko/Excel_Note/11-01_ …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/03/11 18:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A