Excel VBA質問箱 IV

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

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


11445 / 13646 ツリー ←次へ | 前へ→

【16050】ユーザーフォーム移動時に痕跡が残るんですが。 youko 04/7/15(木) 12:07 質問[未読]
【16051】Re:ユーザーフォーム移動時に痕跡が残るん... Jaka 04/7/15(木) 12:27 回答[未読]
【16052】Re:ユーザーフォーム移動時に痕跡が残るん... Jaka 04/7/15(木) 13:35 回答[未読]
【16053】Re:ユーザーフォーム移動時に痕跡が残るん... youko 04/7/15(木) 13:37 質問[未読]
【16054】Re:ユーザーフォーム移動時に痕跡が残るん... Jaka 04/7/15(木) 14:00 回答[未読]
【16055】Re:ユーザーフォーム移動時に痕跡が残るん... youko 04/7/15(木) 16:30 質問[未読]
【16059】Re:ユーザーフォーム移動時に痕跡が残るん... Jaka 04/7/15(木) 16:54 回答[未読]
【16061】Re:ユーザーフォーム移動時に痕跡が残るん... youko 04/7/15(木) 17:08 お礼[未読]

【16050】ユーザーフォーム移動時に痕跡が残るんで...
質問  youko E-MAIL  - 04/7/15(木) 12:07 -

引用なし
パスワード
   VBA初心者なので説明も不足するのですが、ユーザーフォームを作成して
表示させた後、クリックして移動させるとカードのようにフォームの痕跡が
のこります。回避するのにはどのようにすれば良いのか教えていただけませんか。

【16051】Re:ユーザーフォーム移動時に痕跡が残る...
回答  Jaka  - 04/7/15(木) 12:27 -

引用なし
パスワード
   こんにちは。

Application.ScreenUpdating = False
の、使用を止めるか、

Private Sub UserForm_MouseDown
で、Me.Top、Me.Leftの値をグローバル変数に入れておき

Private Sub UserForm_MouseUp
で、TopとLeftの値を比較し変わっていたら、
Doevents
を、いれてやればいいと思います。

【16052】Re:ユーザーフォーム移動時に痕跡が残る...
回答  Jaka  - 04/7/15(木) 13:35 -

引用なし
パスワード
   よく考えたら、ややこしいことしないで、これでいいのかも。

Private Sub UserForm_MouseUp
  Doevents
end sub

もしかして、マクロ実行中にって事ですか?
だとしたら、実行マクロの適当なところに数個
Doeventsを
適当にちりばめておけば...。

【16053】Re:ユーザーフォーム移動時に痕跡が残る...
質問  youko E-MAIL  - 04/7/15(木) 13:37 -

引用なし
パスワード
   jakaさん、有り難うございます。
Application.ScreenUpdating = False
の使用を止めることにより解決しました。
ちなみに私には難しいのですが後者の方法であればフォームは指定した位置
から移動しないという事になるのですか?
すみません。理解していないと思われるでしょうが前者の方法だとフォーム
に配置したコントロールのイベントが発生するとシートが切り替わるので
多少厄介なんです。

【16054】Re:ユーザーフォーム移動時に痕跡が残る...
回答  Jaka  - 04/7/15(木) 14:00 -

引用なし
パスワード
   ユーザーフォーム上で、左クリックを放したときに発生するイベント。
Private Sub UserForm_MouseUp
  Doevents
end sub

MouseDownは、
左クリックしたとき発生。

つまりフォーム上で、
左クリックしたときのフォームの位置と
ボタンを放したときの位置が違っていたら、制御をOSに渡して、
この場合は、画面を最新の情報にしてもらおうと、言うことです。

それで、単純にマウスアップした時だけでも良いかなとも思えましたし、
メインコードにDoEventsをちりばめておけば、適度に更新してくれるので楽かと思いました。
OSに一旦制御を渡すので、その分処理は遅くなります。

【16055】Re:ユーザーフォーム移動時に痕跡が残る...
質問  youko E-MAIL  - 04/7/15(木) 16:30 -

引用なし
パスワード
   Doevents、 JaKaさんに教えて頂いたとおりやってみたんですが思うようにいきません。きっと私のやり方がおかしいのでしょうが、マウスの左クリックを放した時点で制御をOSに渡して更新したとしても画面のフォームの移動している途中の痕跡までも反映してくれますか?質問内容がとっても理解しにくくて大変困られると思いますが、フォームが移動するのは何故だろうとかそのイベントってどうなっているんだろう?と考えだすと混乱してきて移動する事自体をやめることは出来ないものかと悩んでいます。
Private Sub UserForm_MouseDown
を中止する方法はありますか?

【16059】Re:ユーザーフォーム移動時に痕跡が残る...
回答  Jaka  - 04/7/15(木) 16:54 -

引用なし
パスワード
   ▼youko さん:
>マウスの左クリックを放した時点で制御をOSに渡して更新したとしても画面のフォームの移動している途中の痕跡までも反映してくれますか?
あそうか、してくれませんね。

Private Sub UserForm_MouseDown で、
Application.ScreenUpdating = True にして
DoEvents    忘れずに入れる。

Private Sub UserForm_MouseUp
Application.ScreenUpdating = False にもどすのは...。

>移動する事自体をやめることは出来ないものかと悩んでいます。
これで、10秒の間、何も出来なくなります。
ボタン等にも触れません。

Private Sub UserForm_Activate()
UserForm1.Enabled = False
Application.Wait Now + TimeValue("00:00:10")
UserForm1.Enabled = True
End Sub

【16061】Re:ユーザーフォーム移動時に痕跡が残る...
お礼  youko E-MAIL  - 04/7/15(木) 17:08 -

引用なし
パスワード
   JaKaさん、本当に有り難うございます。早速試してみます。私の疑問を明確に理解して頂いた事、大変うれしくてなんかすごい!!って感激しています。今日は仕事がおしまいなのでコンピューターがつかえず、また明日とりかかります。仕事で使う台帳を作成中なんですが他にも行詰まる事が出て来ると(必ず!)思います。助けて下さい。本日、この件で1日かかってしまいました。明日、解消することを願って終了します。ほんと、アリガトウございました。

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