- ベストアンサー
エクセル95のマクロで自動的に全画面表示したい
エクセル95のマクロで質問です。 エクセルのファイルを開いた時、自動的に全画面表示にするには Sub Auto_Open() Application.DisplayFullScreen = True End Sub で、立ち上げた時自動的に全画面表示になりますよね。 これを最小化したい場合、このシート上に最小化ボタンをつけて Sub Macro1() Application.WindowState = xlMinimized End Sub というマクロを登録して最小化して、下のツールバーにアイコン化しました。 この場合ですが、次に、ツールバーのエクセルのアイコンをクリックしたとき、エクセル画面は全画面ではなくノーマルなものになってしまいます。 これを自動的に全画面表示にする場合はどうすればいいのでしょうか?
- みんなの回答 (13)
- 専門家の回答
質問者が選んだベストアンサー
もう一度だけ・・・ 最小化マクロで、最小化が終わるまで、ループし、 最小化が終わったらフルスクリーンにもどし、マクロ終了 DoEventsを書いておけば、他の処理に影響はないと思います。(断言はできませんが) もし、このような方法が、お好みでなければ、一度閉めて、再度質問してみてください。 (ここの質問は、もう私と、kazuhiko5681さん以外見ていないと思われます。) Sub Macro1() With Application .WindowState = xlMinimized Do While (.WindowState = xlMinimized) DoEvents Loop .DisplayFullScreen = True End With End Sub
その他の回答 (12)
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。私はこれ以上貴方様のお役に立つような知識は持ち合わせておりません。誠に申し訳ございませんがお許し下さい。
お礼
大変お世話になり、ありがとうございました。 とても感謝いたしております。お許しだなんてめっそうもない! ながなが質問いたしましてお許しくださいませ。 ほんとうに有難うございました。
- taisuke555
- ベストアンサー率55% (132/236)
一難去ってまた一難・・・ 私の書いた方法は、最小化している間、プログラムが実行されているので、 そういう事もあるとは思いましたが、600Kbとは・・・ 私の使用しているファイルサイズは大きくて100Kb位 CPUは・・・忘れてしまいましたが、 その位なら、普通に動作します。 CPUの性能の問題もあるとは思いますが、このプログラムは、普通VBなどでコンパイルし、 Exeとして使用する方法なので 打開策としては、 (1)600Kbのファイルをいくつかのファイルに分割する。 (2)VB等でExeを作成し、EXCELを監視する。 (3)新しいパソコン(CPUがアップしたもの)を購入する。 (4)Excelバージョンをあげ、考える。 (5)この方法をあきらめ、新たな方法を探す。 ざっと考え付くものを上げてみました。 きっと(5)の方法を選択するとは思いますが・・・ 既に述べたように、限界のなか、なかば強引に出した回答ですので この他の回答となると、見つかるかどうか・・・ #9でも書いたように1度締めて、再度質問してみたほうが、 私よりも専門に(クラスやら、APIやら)回答してくださる方もおられますので 早いかもしれません。 もちろん引き続き、考えてはみますが(今度はAPIに挑戦!) 違う人の意見も取り入れた方がよいかもしれません。 なにぶんEXCEL95という事で、私の方で、テストする事が困難です。 回答しておいて、無責任ですが、何卒ご了承願います。
お礼
大変お世話になり、ありがとうございました。 とても感謝いたしております。 このままでも使えないわけではないのでこれでいくことにしました。 ほんとうに有難うございました。
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。動いてよかったですね。私の知識が足りないばかりにお役に立てず、申し訳ございませんでした。 taisuke555さんがご説明しておられる While 条件式 ・・・ Wend という式の意味を、私の友達(30年間SEをやっている)にこの間私が質問したのですが、現在は使われていないので、覚える必要はないと言われました。昔のベーシックでよく使われていた書き方だそうです。 それと、Do・・・Loopの説明で不足している部分があるので、補足させていただきます。Do・・・Loopの構文は Do until 条件式 ・・・ Loop Do While 条件式 ・・・ Loop Do ・・・ Loop Until 条件式 Do ・・・ Loop While 条件式 の4種類があります。untilの場合は、条件式になるまで、Whileの場合は条件式の間・・・の処理を繰り返し実行するという動作をします。 ここで大切なのは、Doの後に条件式を書くか、Loopの後に条件式を書くのかによって処理の繰り返し方が違うという点です。 Do until 条件式 ・・・ Loop Do While 条件式 ・・・ Loop この構文は、・・・条件式に当てはまってしまった場合は、・・・の処理は実行されません。 Do ・・・ Loop Until 条件式 Do ・・・ Loop While 条件式 この構文は、条件式に当てはまっていても1回は、・・・の処理が実行されてしまいます。 私の友達が、この違いを知らない人が非常に多いと言っていました。 このことは非常に重要なことだと思ったので、お知らせいたします。
お礼
重ね重ねありがとうございます。知識が足りないなんてとんでもない! 申し訳ないのは基本もろくに勉強してないわたしの方です。 下にも書きましたが、よろしければ再度お知恵を貸してください。 重複しますが、テスト用に作成したエクセル95のファイルでは最小化、再表示時の全画面化ともにスムーズに作動したのですが、本当に使いたかったファイル(600kbくらい。他にもいろいろマクロを使用しています)に書きいれたところ、最小化はスムーズに行くのですが、タスクバーのアイコンをクリックして再表示する時がかなり重いようで、何度かダブルクリックしないと再表示されないのです。これはどうしようもないのでしょうか? (長時間放置したのではなく、最小化後すぐにタスクバーのエクセルアイコンをクリックしたのですが)
- taisuke555
- ベストアンサー率55% (132/236)
お気に召して頂いたようで何よりです。 >Do While、DoEvents、Loopのそれぞれの意味 あまり説明は得意ではありませんが・・・ Do While 条件式 ・・・ Loop で1セットです。 条件式が成立している間Loopの中を回ります。 For ... Nextと似たようなものです。 今は While 条件式 ・・・ Wend と書くみたいですけど・・・昔の人間なので。 他に Do '無限ループ ・・・ Loop や Do Until 条件式 '条件式が成立するまで ・・・ Loop などの書き方があり、 Do...Loopの間に Exit DoというコマンドがあるとLoopを強制的に抜けます。 DoEventsについては 「発生したイベントがオペレーティング システムによって処理されるように、 プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」 とヘルプにはのっていますが、 一時的にWindowsに制御を返す命令と言うことでしょうか・・・ 長い処理(Do...Loopや、For i=1 to 10000000...Next)の時に DoEventsを記述しないと、Windowsが反応なしと見なしてフリーズしてしまいます。(たしか) こんな感じでわかりますでしょうか?
お礼
重ね重ねありがとうございます。 やはり基本から勉強しないといけないようです。有難う御座いました。 ここでポイントを発行して終了しようと思いましたが、大変勝手なのですが最後に一つだけお願いします。 テスト用に作成したエクセル95のファイルでは最小化、再表示時の全画面化ともにスムーズに作動したのですが、本当に使いたかったファイル(600kbくらい。他にもいろいろマクロを使用しています)に書きいれたところ、最小化はスムーズに行くのですが、タスクバーのアイコンをクリックして再表示する時がかなり重いようで、何度かダブルクリックしないと再表示されないのです。これはどうしようもないのでしょうか?
- taisuke555
- ベストアンサー率55% (132/236)
EXCEL95に限らず、EXCEL自体のイベントという物が無いような気がします。 下記のサンプルは,VBなどで、使うのですが、 EXCELで使っていいのかわかりません。 実際に使ってみたところ、ブックの右側に、終了ボタン等が現れませんが、 普通の処理(文字を書くなど)はできました。 Sub auto_open() Application.DisplayFullScreen = True Do While (flg = 0) If (Application.WindowState = xlMinimized) Then Do While Application.WindowState = xlMinimized DoEvents Loop Application.DisplayFullScreen = True End If DoEvents Loop End Sub 私もこれ位が限界です。あとは、VB等でEXCELを制御する方法がありますが・・・ あまり役に立たずすみません。
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんにちは。私はエクセル95を使ったことがないので、これ以上お知らせすることはできません。そこでマイクロソフトのサポートセンターを利用されてみてはいかがでしょうか。確実な答えを知ることができると思います。 エクセル95だと90日間の無料サポートがついていたと思います。もし使い切ってしまった時は、有料サポートを受けることができます。18000円費用がかかりますが、価値はあると思います。電話番号をお知らせしておきます。 03(5354)4500 無料サポート 0120-17-0196 有料サポート
お礼
すみません。お世話になりました。ご親切有難う御座いました。
- taisuke555
- ベストアンサー率55% (132/236)
以下の操作で確認してください。 1、excel上で[Alt]+[F11]を押す。VisialBasicEditerに変更されます。 2、左上にプロジェクトと書いてある中に、 VBAProject(現在のブック名) └Microsoft Excel Objects ├Sheet1 ・・・ └ThisWorkbook まず、このようになっているか?もしあれば、ThisWorkBookをダブルクリック なければ、[Ctrl]+[R]で出てくるか確認? それでもでてこなければ、この操作はできません。 3.プログラムを書くエリアの上にある(General)と書いてあるコンボボックスを選択して [WorkBook]に変更 隣のコンボボックスの[SelectionChange]を[WiowReseize]に変更すると Private Sub Workbook_WindowResize(ByVal Wn As Window) end sub と表示されますので、以下のようにします。 Private Sub Workbook_WindowResize(ByVal Wn As Window) Application.DisplayFullScreen = True End Sub 思ったようには、いっていないと思いますが、とりあえず。 この操作が出来ますか?
補足
質問の最初にも書きましたようにエクセル95なんです。 VisialBasicEditerは97以降のものだと思います。 95では無理なのでしょうかねえ。
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。貴方様はコードをどのモジュールシートに書かれましたか?もし、標準モジュールシートもしくは各シートのモジュールシートに書かれたのだとしたならば動作しないと思います。This Workbookのモジュールシートに書いて実行してみて下さい。
補足
質問の最初にも書きましたようにエクセル95なんです。 モジュールは標準モジュールシートしかないようなのです。 95では無理なのでしょうかねえ。
- taisuke555
- ベストアンサー率55% (132/236)
#3さんの回答が入りましたので、2つ確認です。 (1)Excelのアイコンをクリックした時、Auto_Activateの処理にいっていますか? たぶんいっていないと思うのですが、Auto_Activateの説明が無いので(Excel97,Excel2000)どうすればいいのか、補足できずにいます。 (2)Excel95には http://oshiete1.goo.ne.jp/kotaeru.php3?q=395786 の質問ででている 「Private Sub Worksheet_Change(ByVal Target As Range) 」 は使用できますか? 確認方法は、上記URLにあります。 (質問者にある場合とない場合を記述したので、あったか、なかったか教えて欲しかったのですが・・・) あれば、楽なんですが・・・ 以上2点、補足してください。(他の人の回答で解決すれば、無視してください)
補足
すみません。 質問の意味が理解できないのです。 もともとVBAにそんなに知識があるわけではないものですから。
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。自信がないのですが、私の参考書に書いてあったマクロを提供します。お試しになってみて下さい。 Sub Auto_Activate With activewindow .windowstate = slnormal .top = 0 .left = 0 .height = application.usableheight .width = application.usablewidth end with end sub
お礼
ありがとうございました。 残念ながら動きませんでした。 思うに、ツールバーのエクセルアイコンをクリックしただけではアクティブにならないのではないでしょうか?
- 1
- 2
お礼
ありがとうございました! 上記をコピーして標準モジュールに貼り、シート上にこさえた最小化ボタンにマクロ設定しましたら完全に動きました。感激しましたねえ! 最後に、Do While、DoEvents、Loopのそれぞれの意味を教えていただけないでしょうか?