Page 133 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼モードレスフォームを表示している時に、ア... てと 02/9/25(水) 9:25 ┗Re:モードレスフォームを表示している時に、ア... ichinose 02/9/25(水) 10:08 ┗結果は同じでした。 てと 02/9/25(水) 18:23 ┗excel2000では・・・ ichinose 02/9/25(水) 18:54 ┗実はXPなんです。 てと 02/9/26(木) 8:58 ┗うちもXPなんですが・・・ つん 02/9/26(木) 9:47 ┗Re:うちもXPなんですが・・・ ichinose 02/9/26(木) 10:14 ┣Re:うちもXPなんですが・・・ てと 02/9/26(木) 11:49 ┗試してみました。 てと 02/9/26(木) 18:13 ┗Re:試してみました。 ichinose 02/9/26(木) 21:45 ┣挿入個所が間違っていたことに気づきました てと 02/9/27(金) 6:35 ┗解決しました! てと 02/9/27(金) 9:54 ─────────────────────────────────────── ■題名 : モードレスフォームを表示している時に、ア... ■名前 : てと <teto_p@h9.dion.ne.jp> ■日付 : 02/9/25(水) 9:25 -------------------------------------------------------------------------
表題だけでは何だか分からないと思いますので、以下にやっていることを説明します。 1.BOOKに複数のシートが有り、シート1に明細データが蓄積されています。 2.シート2〜先は、明細データからフィルタで抜き出した項目別の明細データと、そのデータを基にして作成したピボットテーブルでの集計表が横方向にいくつか並んでいます。 3.BOOKを開くといくつかの処理をさせるために作ったユーザーフォームがモードレスで表示されます。 4.ユーザーフォームの「集計処理」ボタンをクリックすると、上記2.で説明したデータが作成されます。 (1)なお、「集計処理」はシート(n)に対して項目nの処理だけ行います。 (2)「集計処理」実行中は画面が動かないようにScreenUpdateはfalseにしていて、集計が終了した時点でTrueに切り替えた後にシート(n)をSelectして、結果を表示するようにしてあります。 (3)結果を表示する直前で「ウィンドウ枠の固定」をして、左側の明細データを見ながらピボットテーブルの集計結果を見られるようにしてあります。 ここで、問題なのが、最初に表示させておいたユーザーフォームはモードレスで表示されたままにしてあるのですが、これはそのままの状態で集計結果シート上のアクティブセルを矢印キーで動かしたい。 しかし、一旦シート上で任意のセルをクリックしないと矢印キーが効かず、と言うかユーザーフォーム上のボタンの選択が変化するという動きです。 「任意のセルをクリック」しなくても直ぐにアクティブセルを矢印キーで移動できるようにしたいのですが、どのようにしたらこれを実現できるでしょうか? 説明がちょっと長くなりましたが、宜しくお願いいたします。 |
▼てと さん: こんにちは。 >表題だけでは何だか分からないと思いますので、以下にやっていることを説明します。 > >1.BOOKに複数のシートが有り、シート1に明細データが蓄積されています。 >2.シート2〜先は、明細データからフィルタで抜き出した項目別の明細データと、そのデータを基にして作成したピボットテーブルでの集計表が横方向にいくつか並んでいます。 >3.BOOKを開くといくつかの処理をさせるために作ったユーザーフォームがモードレスで表示されます。 >4.ユーザーフォームの「集計処理」ボタンをクリックすると、上記2.で説明したデータが作成されます。 > (1)なお、「集計処理」はシート(n)に対して項目nの処理だけ行います。 > (2)「集計処理」実行中は画面が動かないようにScreenUpdateはfalseにしていて、集計が終了した時点でTrueに切り替えた後にシート(n)をSelectして、結果を表示するようにしてあります。 > (3)結果を表示する直前で「ウィンドウ枠の固定」をして、左側の明細データを見ながらピボットテーブルの集計結果を見られるようにしてあります。 > > >ここで、問題なのが、最初に表示させておいたユーザーフォームはモードレスで表示されたままにしてあるのですが、これはそのままの状態で集計結果シート上のアクティブセルを矢印キーで動かしたい。 >しかし、一旦シート上で任意のセルをクリックしないと矢印キーが効かず、と言うかユーザーフォーム上のボタンの選択が変化するという動きです。 > >「任意のセルをクリック」しなくても直ぐにアクティブセルを矢印キーで移動できるようにしたいのですが、どのようにしたらこれを実現できるでしょうか? > >説明がちょっと長くなりましたが、宜しくお願いいたします。 ボタンクリックでの例で・・・。 '============================================ Private Sub CommandButton1_Click() '何かの処理 worksheets(1).Activate '例えばですが、 Application.Visible = True End Sub でどうでしょうか? |
▼ichinose さん: >ボタンクリックでの例で・・・。 >'============================================ >Private Sub CommandButton1_Click() > '何かの処理 > worksheets(1).Activate '例えばですが、 > Application.Visible = True >End Sub > >でどうでしょうか? Application.Visible = True を追加してみましたが 結果は同じでした。 他に手立てはないものでしょうか。。。 |
▼てと さん: >▼ichinose さん: >>ボタンクリックでの例で・・・。 >>'============================================ >>Private Sub CommandButton1_Click() >> '何かの処理 >> worksheets(1).Activate '例えばですが、 >> Application.Visible = True >>End Sub >> >>でどうでしょうか? Ex2000では、これで動いていますが、バージョン違いますか? XPですか?もしそうだとしたら、まだインストールしてません。 ごめんなさい。 |
▼ichinose さん: >▼てと さん: >>▼ichinose さん: >>>ボタンクリックでの例で・・・。 >>>'============================================ >>>Private Sub CommandButton1_Click() >>> '何かの処理 >>> worksheets(1).Activate '例えばですが、 >>> Application.Visible = True >>>End Sub >>> >>>でどうでしょうか? >Ex2000では、これで動いていますが、バージョン違いますか? >XPですか?もしそうだとしたら、まだインストールしてません。 >ごめんなさい。 実はXPなんです。最初に書いておけばよかったですね。 2000からXPでけっこう変わったところがあるのでしょうか? 別の質問になってしまいますが、会社は未だにOffice97でして、これをバージョンアップして行きたいのですが、どのレベルに上げたらいいのでしょう。 あまりにも最新バージョンから遅れているので、世間から見放されている?かのように思ってしまいます。 VBAを使ってごりごりやってる人は何人もいませんが、普通の使い方だけでも互換性を気にしなければならないとなると、重たい仕事になりますね。 一応、XPを導入したPCを1台用意して移行問題を潰していくつもりですが、(最初の質問はそのPCで作っていて発生した問題です)この話が分かるのが私だけなので、ストレスにならないように早めに対応しているつもりです。 |
てとさん、ichinoseさん、おはようございます。 回答ではなくて申し訳ないんですが、 >実はXPなんです。最初に書いておけばよかったですね。 >2000からXPでけっこう変わったところがあるのでしょうか? うちもXPで、ちょっくら試してみたのですが、 こちらでは上手く動作しました。 フォームの上に、コマンドボタンだけ配置して、ichinoseさんのコードを書いただけでテストしただけなんですけど・・・ バージョンの問題ではないようですね? |
▼つん さん: てとさん こんにちは。 >うちもXPで、ちょっくら試してみたのですが、 >こちらでは上手く動作しました。 >フォームの上に、コマンドボタンだけ配置して、ichinoseさんのコードを書いただけでテストしただけなんですけど・・・ つんさん、ありがとうございます。 私もXPは購入はしてあるんですが、インストールしてないもので・・。 てとさん、私が記述したような単純なコードでのテストでも駄目なんですか? 試してみて下さい。 |
▼ichinose さん: >てとさん、私が記述したような単純なコードでのテストでも駄目なんですか? >試してみて下さい。 問題になっているプログラムにコードを追加して駄目でした。 教えていただいたテストは試していませんので、これからやってみます。 |
あの例示ですと、問題は発生しないことが確認できました。 私の作ったロジックですと、ボタンクリックで別のユーザーフォームを表示して、明細データを選択するためのパラメータデータ(期間や他の情報)を入力します。 その後に集計処理の本体が標準モジュールの中で処理され、結果が求まるという流れです。 このような場合は、何か別の対応が必要となるのでしょうか? |
▼てと さん: こんばんは。 >あの例示ですと、問題は発生しないことが確認できました。 そうですか。では、Application.Visible=Trueを記述するタイミングの問題ですね。 >私の作ったロジックですと、ボタンクリックで別のユーザーフォームを表示して、明細データを選択するためのパラメータデータ(期間や他の情報)を入力します。 この別のフォームもモーダレス表示なんですか? この別のフォームがモーダルモードなら、 '================================= Private Sub CommandButton1_Click() UserForm2.Show Me.Repaint Worksheets(1).Activate Application.Visible = True End Sub でOKでした。 モーダレスモードの場合、 最初に表示しているフォームのモジュールで '=================================== Private Sub CommandButton1_Click() UserForm2.Show vbModeless End Sub '==================================== Sub act_sht() Me.Repaint Worksheets(1).Activate Application.Visible = True End Sub このフォームから表示している別のフォームモジュールで例えばボタンが押された場合で、 '========================================== Private Sub CommandButton1_Click() '集計処理 Me.Hide UserForm1.act_sht Unload Me End Sub こんな記述では、目的どおり動作をします。 Application.Visible=Trueを出すタイミングを工夫してみては? |
▼ichinose さん: >▼てと さん: >こんばんは。 >>あの例示ですと、問題は発生しないことが確認できました。 >そうですか。では、Application.Visible=Trueを記述するタイミングの問題ですね。 > >>私の作ったロジックですと、ボタンクリックで別のユーザーフォームを表示して、明細データを選択するためのパラメータデータ(期間や他の情報)を入力します。 >この別のフォームもモーダレス表示なんですか? >この別のフォームがモーダルモードなら、 >'================================= >Private Sub CommandButton1_Click() > UserForm2.Show > Me.Repaint > Worksheets(1).Activate > Application.Visible = True >End Sub >でOKでした。 >モーダレスモードの場合、 >最初に表示しているフォームのモジュールで >'=================================== >Private Sub CommandButton1_Click() > UserForm2.Show vbModeless >End Sub >'==================================== >Sub act_sht() > Me.Repaint > Worksheets(1).Activate > Application.Visible = True >End Sub >このフォームから表示している別のフォームモジュールで例えばボタンが押された場合で、 >'========================================== >Private Sub CommandButton1_Click() > '集計処理 > Me.Hide > UserForm1.act_sht > Unload Me >End Sub > >こんな記述では、目的どおり動作をします。 >Application.Visible=Trueを出すタイミングを工夫してみては? 最初にApplication.Visible=Trueを教えていただいた時の挿入個所を間違っていたと思います。 標準モジュールの最後に挿入していました。これでは駄目なんですよね。 上記の方法を教えていただいて「あっ!?」と思った次第です。 それから、パラメータデータを入力するフォームはモーダルモードです。 出社したら早速試してみます。たぶん、今度はうまくいくと思います。 結果が楽しみです! |
Application.Visible = True を書いたところが標準モジュールだったのが原因でうまくいかなかったのを確認しました。 モーダレスモードのユーザーフォームからモーダルモードのユーザーフォームを呼び出した後ろに Application.Visible = True を入れたところ、抱えていた問題が解決しました。 ほんの少しの勘違いでうまく行かず、ご迷惑をおかけして申し訳有りませんでした。 お世話になりました。 感謝です! P.S. 今朝の通勤途中で、ボランティアセンターで働いている友人にメールしました。 「ネット上で助けてもらっています。こういう影武者が世の中にたくさんいます。」と。。。 |