Excel VBA質問箱 IV

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

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


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

【12153】Unload Meをしても表示されたままです。 おじゃる 04/3/25(木) 13:27 質問
【12156】Re:Unload Meをしても表示されたままです。 IROC 04/3/25(木) 14:46 回答
【12164】Re:Unload Meをしても表示されたままです。 おじゃる 04/3/25(木) 16:33 質問
【12158】Re:Unload Meをしても表示されたままです。 つん 04/3/25(木) 14:57 発言
【12166】Re:Unload Meをしても表示されたままです。 おじゃる 04/3/25(木) 16:36 質問
【12172】Re:Unload Meをしても表示されたままです。 IROC 04/3/25(木) 18:25 回答
【12252】Re:Unload Meをしても表示されたままです。 おじゃる 04/3/28(日) 12:14 質問
【12261】Re:Unload Meをしても表示されたままです。 IROC 04/3/29(月) 9:04 回答
【12262】Re:Unload Meをしても表示されたままです。 おじゃる 04/3/29(月) 9:19 質問
【12264】Re:Unload Meをしても表示されたままです。 IROC 04/3/29(月) 10:51 回答
【12265】Re:Unload Meをしても表示されたままです。 おじゃる 04/3/29(月) 11:03 質問
【12267】Re:Unload Meをしても表示されたままです... IROC 04/3/29(月) 11:21 回答
【12271】Re:Unload Meをしても表示されたままです... おじゃる 04/3/29(月) 13:05 質問
【12273】Re:Unload Meをしても表示されたままです... IROC 04/3/29(月) 13:20 回答
【12274】Re:Unload Meをしても表示されたままです... おじゃる 04/3/29(月) 13:28 お礼

【12153】Unload Meをしても表示されたままです。
質問  おじゃる  - 04/3/25(木) 13:27 -

引用なし
パスワード
   こんにちは。
フォームの表示でお聞きしたいのですが、
親Formから子Formを呼び出した後、Unload Me(または Unload 子Form)で
閉じようとするのですが、表示されたままです。(操作は出来ません)
ステップで実行すると閉じるのですが、普通に動かすとダメです。
子FormをUnload した後は、親Formは閉じません。
再度同じ子FormをShowすると、表示されたままの子Formが生きます。
これ以外の子Formは同じ方法で閉じるのですが、
なにか特別な命令を気がつかずにしているのでしょうか。

よろしくお願いします。

【12156】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/25(木) 14:46 -

引用なし
パスワード
   閉じて → 開く
にしてますか?


開く → 閉じる
にすると
処理は、開いたユーザーフォームのモジュールに移りますけど。

(モーダルの場合です)

【12158】Re:Unload Meをしても表示されたままです...
発言  つん E-MAIL  - 04/3/25(木) 14:57 -

引用なし
パスワード
   おじゃる さん、こんにちは。

>親Formから子Formを呼び出した後、Unload Me(または Unload 子Form)で
>閉じようとするのですが、表示されたままです。(操作は出来ません)
>ステップで実行すると閉じるのですが、普通に動かすとダメです。
>子FormをUnload した後は、親Formは閉じません。
>再度同じ子FormをShowすると、表示されたままの子Formが生きます。
>これ以外の子Formは同じ方法で閉じるのですが、
>なにか特別な命令を気がつかずにしているのでしょうか。

親Formのモジュールで、子Fromを、Showして、
子Formのモジュールで、自分をUnloadさせてるんですよね?
親Formはその間、表示されたままなんですよね?

こちらでは再現しませんでしたけど・・・というか、おじゃるさんとこでも、
再現するフォームと再現しないフォームがあるんですよね?
モードレス表示とモーダル表示の違いがあるとか・・・

こういうやり方ではどうでしょうか?

親フォーム

  Load UserForm2
  UserForm2.Show
  Unload UserForm2

子フォーム

  Me.Hide
  DoEvents

【12164】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/25(木) 16:33 -

引用なし
パスワード
   IROCさん返答ありがとうございます。


Show Userform2
Unload Me(親自身を閉じます)

子(Userform2)
Unload Me (子自身を閉じてます)

こんな処理です。親に戻したあと親が子を閉じないとだめなのでしょうか。

【12166】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/25(木) 16:36 -

引用なし
パスワード
   つんさん ありがとうございます。

>親Formのモジュールで、子Fromを、Showして、
>子Formのモジュールで、自分をUnloadさせてるんですよね?
>親Formはその間、表示されたままなんですよね?

そうです。そのとおりです。

>こういうやり方ではどうでしょうか?

ありがとうございます。試してみます。

親と子のシステム内の関係とか、メモリの開放とかの事がよくわからず、
手探りです。
実行速度もだんだん遅くなるような気がします。
これも、親と子に関係するんでしょうか。

【12172】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/25(木) 18:25 -

引用なし
パスワード
   >親と子のシステム内の関係とか、メモリの開放とかの事がよくわからず、
>手探りです。
>実行速度もだんだん遅くなるような気がします。
>これも、親と子に関係するんでしょうか。

プログラムにとっては、親と子は関係ないです。

ユーザーフォームを呼び出す順番にすぎません。

ユーザーフォームを、モードレスで表示しているのか
モーダルで表示しているのか、いまだに不明ですが、
モジュールごとのプログラムの処理される順番を把握できれば
簡単なことだと思います。

あとは、Unload するか、 Hide するかを使い分けてあげれば良いと思います。

それにメモリのことも、プログラムの構成にくらべれば
たいして重要ではないです。

【12252】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/28(日) 12:14 -

引用なし
パスワード
   IROC さん、ありがとうございます。
せっかく返答していただいたのに
仕事の納品が迫っていてここを開く余裕もなく、
お礼も出来ませんでした。すみません。

Formはモーダルで開いています。
ステップで実行すると閉じるのは、
どうやらフレームの固定と関係があるようです。
でも、直前でTrueにしても子Formは消えてくれません。

【12261】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/29(月) 9:04 -

引用なし
パスワード
   >どうやらフレームの固定と関係があるようです。
>でも、直前でTrueにしても子Formは消えてくれません。

どのようなコードでしょうか?

こちらで再現させる方法とコードがあれば、教えていただけませんか?

【12262】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/29(月) 9:19 -

引用なし
パスワード
   IROCさん、こんにちは。ありがとうございます。

コードは Application.ScreenUpdating です。
UserForm2を呼び出す前にこのコードをFalseにし、
UserForm2をUnloadする前にTrueにしています。

Application.ScreenUpdating = False
Show UserForm2 ←この時、UserForm1は表示したままです。
(UserForm2で処理)
Application.ScreenUpdating = True
Unload UserForm2
 ↓
このあと、UserForm1の背後にUserForm2が表示されたままになります。
Form2の操作はできません。

UserForm1には、コマンドボタンが4つあり、それぞれ
UserForm2からUserForm5までを呼び出して処理をしていますが、
UserForm2を呼び出した時のみ、この症状になります。

ちなみに、UserForm2が背後に残ったままでUserForm3を呼び出す
コマンドボタンをクリックすると、UserForm3をUnloadした時に
背後のForm2も消えます。

ややこしくてすみません。再現するの難しいですよね。

【12264】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/29(月) 10:51 -

引用なし
パスワード
   なぜ Application.ScreenUpdating を使っているのですか?

ユーザーフォームの表示・非表示程度の処理では、
必要ないと思いますが?

Application.ScreenUpdating はコードの動作を確認して
問題なかったときに、最後に記述するものです。

Application.ScreenUpdating を全く使わないで
動作させては如何でしょうか?
フォームの表示で何か不都合があるのでしょうか?

【12265】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/29(月) 11:03 -

引用なし
パスワード
   >なぜ Application.ScreenUpdating を使っているのですか?

理由は2つあります。
1つ目は、ユーザーフォームの後ろで処理が動くのを見せたくないので
タイトル画面を開いたまま固定しています。
2つ目は、処理が沢山あるので固定して処理速度を上げたかったからです。

あまり使わないほうが良いコードなのでしょうか。

【12267】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/29(月) 11:21 -

引用なし
パスワード
   ユーザーフォームの関係と
表示させたくない処理の関係を把握しにくいのですが、

>1つ目は、ユーザーフォームの後ろで処理が動くのを見せたくないので
のであれば、
そのマクロ処理のなかでApplication.ScreenUpdatingを記述して、
フォームの表示・非表示のプロシージャと分けては如何でしょうか?

あと隠れてしまうフォームや使用しないフォームは hide するとか。


>2つ目は、処理が沢山あるので固定して処理速度を上げたかったからです。
この見せたくない処理自体に Select や Activate は使ってませんよね?

>あまり使わないほうが良いコードなのでしょうか。
使い方を間違ったり、Select や Activate を隠すために
使うべきではないと思います。
(Select や Activateは、使わなくても処理できるので。)


>UserForm2からUserForm5までを呼び出して処理をしていますが、
>UserForm2を呼び出した時のみ、この症状になります。
部分的に発生するとなると、DoEvents も使えるかもしれません。

【12271】Re:Unload Meをしても表示されたままです...
質問  おじゃる  - 04/3/29(月) 13:05 -

引用なし
パスワード
   >この見せたくない処理自体に Select や Activate は使ってませんよね?

!使ってます。。。  
データの最終セルを調べるのに Selection.End(xlToLeft).Select で
最終セルをアクティブにしてアドレスを取得しています。
空白があるのでCountAが使用できない為ですが。

>使い方を間違ったり、Select や Activate を隠すために
>使うべきではないと思います。
>(Select や Activateは、使わなくても処理できるので。)

テキストファイルを呼び出してアクティブになってしまうものは
大丈夫でしょうか。これも見せたくないのですが。

【12273】Re:Unload Meをしても表示されたままです...
回答  IROC  - 04/3/29(月) 13:20 -

引用なし
パスワード
   >!使ってます。。。  
>データの最終セルを調べるのに Selection.End(xlToLeft).Select で
>最終セルをアクティブにしてアドレスを取得しています。
>空白があるのでCountAが使用できない為ですが。

>データの最終セル
最終セルの定義がよくわかりませんが、
Range("IV1").End(xlToLeft).Address
でしょうか?


>テキストファイルを呼び出してアクティブになってしまうものは
>大丈夫でしょうか。これも見せたくないのですが。
こちらはやむをえないので、Screenupdating を使う範囲を出来る限り
せまくして限定してみては如何でしょうか?

ひとまずUserFormの表示・非表示を扱う部分ではScreenupdatingを使用せずに
「テキストファイルを扱うマクロ」の前後で、設定/解除しては如何でしょうか?

【12274】Re:Unload Meをしても表示されたままです...
お礼  おじゃる  - 04/3/29(月) 13:28 -

引用なし
パスワード
   >Range("IV1").End(xlToLeft).Address
>でしょうか?

そうです。今までセルをアクティブにして取得してました。
お恥ずかしい。。。

>ひとまずUserFormの表示・非表示を扱う部分ではScreenupdatingを使用せずに
>「テキストファイルを扱うマクロ」の前後で、設定/解除しては如何でしょうか?

そのようにしてみます。
いろいろありがとうございました。
とても助かりました。

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