エクセルVBAに関する質問です。VBA(マクロ)実行中に一時的にユーザの操作を許可してセルやセル範囲の選択を行い、その情報をまたマクロ側に渡して処理を続行するというのができるのでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/12/02 14:38:25
  • 終了:2007/12/09 14:40:03

回答(3件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692007/12/02 15:25:04

ポイント27pt

DoEventsを使ってExcelに処理を許可するコードを書いてみました。

最初空白セルを選択して実行すると、違うセルを選択するとそのセルに"ok"を挿入するマクロです。

改良次第でいろいろなことができると思います。

Sub Macro()
    Dim r As Range
    Set r = Selection
    
    While Selection.Value = ""
        DoEvents
        If Selection.Address <> r.Address Then
            Selection.Value = "ok"
        End If
    Wend
End Sub

http://q.hatena.ne.jp/

id:maakunh No.2

maakunh回答回数35ベストアンサー獲得回数22007/12/02 15:34:02

ポイント27pt

マクロ実行中に別のイベントが走ると、マクロが停止するようです。

(Do~LoopにはDoEventsを入れておく)

したがって、ユーザから見た際に処理が継続できているようにするには、

処理中は常にシート上に処理に必要な値を保持しておきつつ、

一時的なユーザ操作の後、処理を再スタートするボタンをクリックしてもらう、

という流れにする必要があると思います。

http://q.hatena.ne.jp/1196573903

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912007/12/02 17:03:03

ポイント26pt

セルを選択するのが目的なら、InputBox を使用してはどうでしょうか。

Type:=8 が、セル選択です。

Sub Sample()
    Dim buf As Range
    Set buf = Application.InputBox(Prompt:="セルを選択してください。", Type:=8)
    MsgBox buf.Address(0, 0) & "の文字色は" & buf.Font.ColorIndex & "です"
End Sub

出典:実は奥が深いInputBox

  • id:SALINGER
    ブレークポイントの挿入で可能だけど、コードを使ってということでいいのかな?
  • id:isogaya
    VBAの環境の中ではなくて、通常のマクロ実行のレベルでエンドユーザの作業して質問内容のことができるかどうかが知りたいのです。可能なんでしょうか?
  • id:Dark1984B
    ユーザの操作を行う前と後のプロシージャを別々に作って
    引き継ぎたい引数をPublic定義の変数で引き継ぐというやりかたもあります


    例(これをThisWorkbookにコピペして下さい)

    Public S1 As String
    Sub 入力()
    S1 = InputBox("なにか入力して下さい")
    End Sub
    Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Target.Value = S1 Then
    MsgBox "選択したセルの値は " & S1 & " と同じです"
    Else
    MsgBox "選択したセルの値は " & S1 & " と異なっています"
    End If
    End Sub

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません