Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3 / 13196 ツリー ←次へ | 前へ→

【80251】Targetにユーザーフォームの値を取得する babolat 18/12/3(月) 19:28 質問[未読]

【80257】Re:Targetにユーザーフォームの値を取得する 亀マスター 18/12/4(火) 0:02 回答[未読]
【80259】Re:Targetにユーザーフォームの値を取得する babolat 18/12/5(水) 11:49 質問[未読]
【80260】Re:Targetにユーザーフォームの値を取得する 亀マスター 18/12/5(水) 23:44 回答[未読]

【80257】Re:Targetにユーザーフォームの値を取得...
回答  亀マスター  - 18/12/4(火) 0:02 -

引用なし
パスワード
   >Target.Value=変数を書くのは、
>ユーザーフォームとシートのどちらに、どのタイミングでしょうか?

やり方はいくつかあると思いますが、とりあえず2つほど

1.フォームのcmb_syukeikaisi_Clickで実行
1-1
bufはcbm_sansyou_Clickの中ではなくUserFormの直下で宣言するか、標準モジュールにパブリック宣言する。
1-2
標準モジュールにRange型の変数をパブリック宣言で用意しておく(例:Rng)
1-3
UserForm.Showの前に、RngにTargetの参照を格納。
(直接Targetを使わないのは、TargetはBeforeDoubleClickの中でしか動かないから)
  Set Rng = Target
1-4
bufに必要な値が入ったら、Rngを介してTargetに値を代入。
  Rng.Value = buf

2.WorkSheetのBeforeDoubleClickで実行
2-1
bufは標準モジュールにパブリック宣言する。
2-2
bufに必要な値が入ったら、フォームを閉じる。
  Unload Me
2-3
WorkSheetのUserForm.Showの続きでTargetにbufの値を代入。
  UserForm.Show
  Target.Value = buf


なお、質問に対する回答ではないのですが、ActiveWorkbookやActiveSheetは何らなの都合で狙ったブックやシートがアクティブになっていなかったときに不具合が起こるので、ブックを開いたときにWorkbook型やWorksheet型の変数に参照を格納し、それを使って操作した方が確実かと思います。

【80259】Re:Targetにユーザーフォームの値を取得...
質問  babolat  - 18/12/5(水) 11:49 -

引用なし
パスワード
   亀マスター様

ご回答いただきありがとうございました。
御礼が遅くなり失礼いたしました。

後で試してみます。

ちなみに、標準モジュールはこの箇所に関しては使用しておらず、
BeforeDoubleClickはシートのモジュールで、あとはユーザーフォームモジュールです。
この場合、標準モジュールに書くとご指示いただいたところは、シートモジュールに記載すればよろしいでしょうか?

【80260】Re:Targetにユーザーフォームの値を取得...
回答  亀マスター  - 18/12/5(水) 23:44 -

引用なし
パスワード
   >ちなみに、標準モジュールはこの箇所に関しては使用しておらず、
>BeforeDoubleClickはシートのモジュールで、あとはユーザーフォームモジュールです。
>この場合、標準モジュールに書くとご指示いただいたところは、シートモジュールに記載すればよろしいでしょうか?

シートモジュールに書くとシートモジュールに記述されたイベント等からしか呼び出せません。そのため、ユーザーフォームモジュールとシートモジュールの両方から呼び出す必要のある変数は、標準モジュールにパブリック宣言で書く必要があります。

具体的に、前回私が回答した1の処理で言えば、bufはフォームモジュールからしか呼び出さないので、フォームモジュールでも標準モジュールでもどちらでも良いですが、Rngはシートモジュールからも呼び出すので、標準モジュールに書く必要があります。

3 / 13196 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free