[[20110119110821]] 『ワークブックのサイズ変更について』(hsi) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ワークブックのサイズ変更について』(hsi)

いつもお世話になっております。

 エクセルを開いた時に全画面表示をして2つ目のファイル3つ目のファイルと
それぞれ、Window画面の設定をおこなっているのですが、
3つ目のブックに限り全画面のままワークシートをWindowsに合わせて表示させました。

 なお、3つ目のブックを開いた時は、1つ目も2つ目も開いたままの状態に
なっています

ソースの内容は以下の通りです。
(全てブックを開いた時に実行されるようになっています)

「1つ目」

    Dim myCBCtrl As CommandBarControl

    Application.DisplayFullScreen = True        '全画面表示(Windows)
    With ActiveWindow
        .WindowState = xlMaximized  '最大化表示(BOOK)
        .DisplayGridlines = False   '枠線の非表示
        .DisplayHeadings = False    '行列番号非表示
    End With

    For Each myCBCtrl In CommandBars("Standard").Controls
      '---使用可能/使用不可能を切り替える
      myCBCtrl.Enabled = Not myCBCtrl.Enabled
    Next

「2つ目」

    Dim myCBCtrl As CommandBarControl

    Application.DisplayFullScreen = True        '全画面表示する

    For Each myCBCtrl In CommandBars("Standard").Controls
      '---使用可能/使用不可能を切り替える
      myCBCtrl.Enabled = Not myCBCtrl.Enabled
    Next

    'ワークシートメニューバー
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    'Application.CommandBars("Worksheet Menu Bar").Enabled = False

    With ActiveWindow
        .WindowState = xlMaximized  '最大化表示
        .DisplayGridlines = False   '枠線の非表示
        .DisplayHeadings = False    '行列番号非表示
    End With

「3つ目」

    With ActiveWindow
        .WindowState = xlNormal     'ノーマル表示
        .Top = 0
        .Left = 0
        .Height = Application.UsableHeight
        .Width = Application.UsableWidth
        .DisplayGridlines = False   '枠線の非表示
        .DisplayHeadings = False    '行列番号非表示
    End With

 3つ目のブックは2つ目のブックからVBAにより新規でファイルを作成し開いた状態に
している為、3つ目のブックは右上に表示されている×ボタンで閉じるように
したいと思いました。

 ※3つ目のブックを閉じた時、2つ目のブックがアクティブになるので、
2つ目のブックに以下のように記述してみましたが改善されませんでした。

Private Sub Worksheet_Activate()

    Dim myCBCtrl As CommandBarControl

    Application.DisplayFullScreen = True        '全画面表示する

    For Each myCBCtrl In CommandBars("Standard").Controls
      '---使用可能/使用不可能を切り替える
      myCBCtrl.Enabled = Not myCBCtrl.Enabled
    Next

    'ワークシートメニューバー
    Application.CommandBars("Worksheet Menu Bar").Enabled = True
    'Application.CommandBars("Worksheet Menu Bar").Enabled = False

    With ActiveWindow
        .WindowState = xlMaximized  '最大化表示
        .DisplayGridlines = False   '枠線の非表示
        .DisplayHeadings = False    '行列番号非表示
    End With

End Sub

 何が起こっているのかというと、3つとも動作上問題ないのですが、
3つ目のブックを開いた時に1つ目と2つ目も3つ目の画面設定が反映されてしまい
ます。

 根本的にやり方が間違っていると思っているのですが、
Web上で調べているとこれといったものが見つからなかった為、
この場をお借りしました。

 やりたい事は、1つ目も2つ目も全画面表示で3つ目のみWindowに合わせて表示
したいと思います。

 たぶん、上記の記述だと1つ目だけを設定すると後に開いたブック全てに
反映されるものだと思いますので、対象のブックのみに反映するものがあればと
思います。

 以上ご教授の程、よろしくお願いいたします。


 すみません。
 何がやりたいのか解っていません。
 ↓を応用できませんか?
 BJ

 Dim Wb As Workbook
 For Each Wb In Workbooks
    Wb.Activate
    MsgBox Wb.Name & "を最小化します。"

    Windows(Wb.Name).WindowState = xlMinimized

    MsgBox Wb.Name & "を最小化しました。"
 Next

お返事ありがとうございます。

説明が下手で申し訳ありません。

 簡単に言うと、最初と2番目に開いたファイルを全画面表示(.WindowState = xlMaximized )に
したまま最後に開いたファイルを通常表示(WindowState = xlNormal)にしたいのです。

 参考に書いていただいたコードを以下のように編集して、最後に開くファイルに記述しましたが、
結果が同じで最初と2番目に開いたファイルも反映されました。

    Dim Wb As Workbook
    For Each Wb In Workbooks

        Wb.Activate
        MsgBox Wb.Name & "を最小化します。"

        Windows(Wb.Name).WindowState = xlNormal
        Windows(Wb.Name).Top = 0
        Windows(Wb.Name).Left = 0
        Windows(Wb.Name).Height = Application.UsableHeight
        Windows(Wb.Name).Width = Application.UsableWidth

        'MsgBox Wb.Name & "を最小化しました。"

    Next

 このコードを書いて気がついたのが、

 1番目のファイルを最小化にします。
 2番目のファイルを最小化にします。
 3番目のファイルを最小化にします。

 とダイアログが立ち上がりました。

 考え方から(間違っていなければですが・・・)開いてるファイル全てを
アクティブウィンドウとしてコードが全てのファイルに適用しているようなので
ファイル名を指定して画面サイズを変更するようなコードがあればこの問題は
解決できるという事でしょうか?

 申し訳ありませんが、よろしくお願いいたします。

(hsi)


 >開いてるファイル全てを
 >アクティブウィンドウとしてコードが全てのファイルに適用しているようなので

 アクティブにしたのは、目で見て確認しやすいだろうという理由だけです。
 実際にはしなくてもいいです。
 全てするか振り分けるかは、自分の判断で振り分けてください。

 Dim wb1 As Workbook, wb2 As Workbook
 For Each wb1 In Workbooks
   Set wb2 = wb1
 Next
 MsgBox "最後に開いたブック " & wb2.Name
 Set wb2 = nothing

 非表示ブックに関しては考慮してません。
 BJ

お返事ありがとうございます。

 上記のコードに一部追記してみましたが、結果は同じでした。
それとも、コードの書き方が間違えてるのでしょうか?

 結果:コードは最後に開いたファイルを指定して画面サイズを変更したように
   見えましたが、実際は全てのファイルも最後の画面サイズの変更が適用さ
   れてしましました。

記述したコードは以下の通りです。

 Dim wb1 As Workbook, wb2 As Workbook
 For Each wb1 In Workbooks
   Set wb2 = wb1
 Next
 MsgBox "最後に開いたブック " & wb2.Name
 wb2.Activate
 Windows(wb2.Name).WindowState = xlNormal
 Windows(wb2.Name).Top = 0
 Windows(wb2.Name).Left = 0
 Windows(wb2.Name).Height = Application.UsableHeight
 Windows(wb2.Name).Width = Application.UsableWidth
 Set wb2 = Nothing

何度も申し訳ありませんが、よろしくお願いします。

追記:
大変申し訳ありません。
OS:Windows2000
Office:2000


 今までのやり取りで出来ると思っていたんだけど。
 たぶんこんな感じ?。
 BJ

 Dim lstNo As Long, wb As Workbook
 lstNo = Workbooks.Count
 For Each wb In Workbooks
   Cnt = Cnt + 1
   With Windows(wb.Name)
      If Cnt = lstNo Then
         .WindowState = xlNormal
         .Top = 0
         .Left = 0
         .Height = Application.UsableHeight
         .Width = Application.UsableWidth
      Else
         .WindowState = xlMaximized  '最大化表示(BOOK)
         .DisplayGridlines = False   '枠線の非表示
         .DisplayHeadings = False    '行列番号非表示
      End If
   End With
 Next

いつも丁寧に返事書いていただき非常にうれしいです。

私がみてもわかりやすいコード書いてくれて助かります。

しかし、このコード最後に開くブックを確認のあと、変数に代入し、
条件 Cnt = lstNo (3=3)の時ノーマル表示でそれ以外は最大化表示と
してくれたのにも関わらず、結果が今までと同じというのが、悲しいですね。

お手数をおかけして申し訳ありませんでした。

これに関してはクローズという事にします。

今回の件でいろいろなやり方(記述)があり本当にVBAはおくが深いですね。

ありがとうございました。

(hsi)


 未だに何をしたいのか見えてこないんだけど。
 いくら初めの方のブックを全画面にしても、最後にノーマル戻せば、
 最後以外のブックを選択しても、全画面になりはしないでしょうね。
 エクセルが別プロセスなら可能かもしれませんけど。
 BJ

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.