トップ回答者
カーソルを移動を促して新しい位置を取得したい.

質問
-
現在のカーソルの位置をrangeオブジェクト1にセットし,次に別の位置にカーソル移動を促して新しい位置をrangeオブジェクト2に設定したいのです.
カーソル移動を促すダイアログ表示にMSGBOX関数を使うとモーダル表示で文書自身を操作できません.rangeオブジェクト1にセット後にユーザーフォームをモードレスで表示するコードですとカーソル移動を未確認のまま次の処理(rangeオブジェクト2にセット)に進んでしまいます.
文書を操作可能なままでユーザーフォームを表示しつつカーソル移動の終了後にOKボタンを押すまで(rangeオブジェクト2にセット)に進まないコードにできないでしょうか.
rangeオブジェクト2にセット以降の処理をOKボタンのコードにする案もありますが,ある条件の場合にのみユーザフォームの表示を行うので,コードの分岐は回避したくもとのコードでの継続処理にしたいのですが,可能でしょうか.
エクセルのようにapplication.inputBoxが使えればいいのですが,ワードでは使えないので別案をさがしていまs.
回答
-
matushiro97 さま
UserForm1OK 変数を共通の変数としています。
魔界の仮面弁士 様の回答のように MsgWaitForMultipleObjects API を使った方が
待ち合わせるのに良いと思いますが、 Sleep で待つサブルーチンを作成してみました、
Sleep している間は操作ができないので反応が遅いかもしれません。
① ユーザーフォームをモードレスで表示する。
② ユーザーフォームが閉じられるまでループして待つ、
③ ユーザーフォームでOKボタンを押されたかの確認は標準モジュールの変数で行う。
標準モジュール
Option Explicit Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public UserForm1OK As Boolean Sub ShowAndWaitForUserForm1() UserForm1OK = False ' UserForm1.Show vbModeless Do DoEvents Sleep (100) If UserForm1.Visible = False Then Exit Do End If Loop End Sub
UserForm1
Option Explicit Private Sub OKCommandButton_Click() UserForm1OK = True Unload Me End Sub
呼び出しの処理
Sub Test() Call ShowAndWaitForUserForm1 MsgBox "終了しました " & UserForm1OK End Sub
以上。参考になれば幸いです。
- 回答としてマーク matushiro97 2022年9月28日 12:10
すべての返信
-
matushiro97 さま
UserForm1OK 変数を共通の変数としています。
魔界の仮面弁士 様の回答のように MsgWaitForMultipleObjects API を使った方が
待ち合わせるのに良いと思いますが、 Sleep で待つサブルーチンを作成してみました、
Sleep している間は操作ができないので反応が遅いかもしれません。
① ユーザーフォームをモードレスで表示する。
② ユーザーフォームが閉じられるまでループして待つ、
③ ユーザーフォームでOKボタンを押されたかの確認は標準モジュールの変数で行う。
標準モジュール
Option Explicit Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public UserForm1OK As Boolean Sub ShowAndWaitForUserForm1() UserForm1OK = False ' UserForm1.Show vbModeless Do DoEvents Sleep (100) If UserForm1.Visible = False Then Exit Do End If Loop End Sub
UserForm1
Option Explicit Private Sub OKCommandButton_Click() UserForm1OK = True Unload Me End Sub
呼び出しの処理
Sub Test() Call ShowAndWaitForUserForm1 MsgBox "終了しました " & UserForm1OK End Sub
以上。参考になれば幸いです。
- 回答としてマーク matushiro97 2022年9月28日 12:10