dポイントプレゼントキャンペーン実施中!

慣れない言語で悪戦苦闘しています。
(アクティブな)ウインドウをクライアント領域一杯まで広げたときのサイズを取得する方法を教えてください。
Application.WindowState = xlMaximizedしたあと、
Windows("ブック名").Width、Windows("ブック名").Heightで取れるかと
思ったのですが、これではxlNormalの時のサイズが返ってきてしまうようです。
目的は、右下一杯までウインドウを広げて、左上は下のウインドウが見えるよう、
少し隙間をあけて開きたいためです。

A 回答 (1件)

Application.WindowState = xlMaximized という書き方をやめ、



Windows("ブック名").WindowState = xlMaximized
Windows("ブック名").Width
Windows("ブック名").Height

という書き方に変更してみてください。("ブック名" のところで指定するブックをすべて同一のブックにする)

おそらくですが、
Application.WindowState = xlMaximized で最大化したウィンドウと
Windows("ブック名").Width でサイズを取得しようとしているウィンドウが違っているのではないかと思います。
最大化したブックで見えなくなっていますが、その後ろで Windows("ブック名") は xlNormal なままでいると思います。

Excel 2013 は SDI になりました。(SDI と MDI の違いは分かりますか?)
ブックを複数開いた状態で、すべてのブックが独立した Excel のウィンドウになっていると思います。
なので
Application.WindowState = xxx で操作対象になるのは 「現在アクティブなブックのウィンドウ」 であり、
ActiveWindow.WindowState = xxx
と同じ事になっているんじゃないかと。


Excel が MDI から完全な SDI に変わったことで、私の中で当時大変大きな話題になった記憶があります。。。
    • good
    • 0
この回答へのお礼

ありがとうございます。
ご指摘を受けて気づいたのですが、最終的には2013用にするマクロなのですが、2010上で、つくりながら確かめてましたので、MDI前提の質問になってしまっていました。

落ち着いてソースを眺めてみると、指摘の通り、
xlMaximized → xlNormal
してるのですが、前者だけブックの指定が抜けてました。

それ以外にも問題があり、xlMaximized で最大化したウィンドウの数字(幅、高さ)をxlNormalのウインドウにそのまま適用しても、ウインドウ自体にクローズボックスやリサイズボックスが有ったりなかったりの違いがあり、それぞれ12px,28pxほどズレてしまい、おかしな結果になっていることに気づいていませんでした。これは2010上で試した結果ですので、逆に2013では調整不要なのかもしれません。まずは、2010上では意図通りに動作するようになりましたので、これから2013で確認します。
ありがとうございました。

お礼日時:2016/02/12 16:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!