重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセルvbaでリボンを非表示にして、ブックを最大化して、微調整したいのですが
Workbook_Openイベントで実行すると、シート名が見えない状態になります。
コードはこれです。

Private Sub Workbook_Open()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" 'リボンを非表示にする
ActiveWindow.WindowState = xlMaximized 'ウィンドウを最大化する

With ActiveWindow
.WindowState = xlNormal
.Top = 0
.Left = 0
.Width = Application.UsableWidth
.Height = Application.UsableHeight ' ウィンドウが使うことのできる範囲の最大限の高さにする
End With

End Sub

ブックを開いた時はシート名が見えないサイズになってしまうのですが
もう一度手動でWorkbook_Openイベントを実行すると、ちゃんとシート名まで表示されます。

なぜ同じコードなのに結果が違うのでしょうか?
横幅に関しては1回目も2回目も同じです。

A 回答 (3件)

#2、cjです。


訂正です。

誤)タスクバー
正)ステータスバー

以上1件、2か所、用語を間違えてしまいました。
失礼しました。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございました。

お礼日時:2013/12/08 19:40

こんにちは。


こんな感じのことでしょうか?

' ' ///
Private Sub Workbook_Open()
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" 'リボンを非表示にする
'  ActiveWindow.WindowState = xlMaximized 'ウィンドウを最大化する
  Application.WindowState = xlMaximized 'アプリケーションのウィンドウを最大化する?

  With ActiveWindow
    .WindowState = xlNormal
    DoEvents  '  タイミングを取る。
    DoEvents  '  念の為、もう一回。
    .Top = 0
    .Left = 0
    .Width = Application.UsableWidth
    .Height = Application.UsableHeight ' ウィンドウが使うことのできる範囲の最大限の高さにする
  End With
End Sub

' ' ///

> なぜ同じコードなのに結果が違うのでしょうか?
> 横幅に関しては1回目も2回目も同じです。

記憶が曖昧なので、確度の低い説明になりますが、
アプリケーション起動直後、ウィンドウサイズを変更する時に
数式バーだったか、タスクバーだったか、
遅れて表示されること
が原因なのではないかと考えています。
"2回目"、というより、一旦アプリケーション起動が済んでいれば、
期待通りの結果が得られる筈です。
    .WindowState = xlNormal
の直後、瞬間的(一時的)に
Application.UsableHeightが[数式バーorタスクバー]の分だけ余分に大きな数字を返す、
というような現象(昔からの仕様?)、と、私は考えています。
実行後の実際のActiveWindow.Heightで比較してみましたが、
ほぼ、数式バーの高さ分だけ大きい高さになっています、が、
誤差があるので(誤差=糊代がないということもあり得ないのですが)、
こちらもあまり自信はないのです。

対策としては、今のところ、DoEvents、しか試せていません。

ところで、
#1さんのご回答を見て疑問に思ったのですが、求める結果は、

' ' ///

Private Sub Workbook_Open()
  Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" 'リボンを非表示にする
  Application.WindowState = xlMaximized 'アプリケーションのウィンドウを最大化する?
  ActiveWindow.WindowState = xlMaximized
End Sub

' ' ///

ということではないですよね?
もし、そちらの方向でシートを大きく表示するのが目的でしたら、
Application.DisplayStatusBar
Application.DisplayFormulaBar
Application.DisplayFullScreen
などについても、試してみるといいと思います。(※元に戻す術を確認してから試してください)
ここら辺を弄ってみれば、色々不思議な仕様が見えてくるので、
私が上のように類推した理由が解って貰えるかも、です。

なんかスッキリしないかも知れませんが、私としてはこんなんで限界です。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございました。

お礼日時:2013/12/08 19:40

私ノン環境では、以下でうまくいきました。



Private Sub Workbook_Open()
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)" 'リボンを非表示にする
With ActiveWindow
.WindowState = xlNormal
.Top = 1
.Left = 1
.Width = Application.UsableWidth
.Height = Application.UsableHeight ' ウィンドウが使うことのできる範囲の最大限の高さにする
End With
ActiveWindow.WindowState = xlMaximized
End Sub
    • good
    • 0
この回答へのお礼

回答頂きありがとうございました。

お礼日時:2013/12/08 19:40

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