[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA:ウインドウ関連の扱い方について』(ぐっちょん)
はじめて投稿させていただきます。
WindowsXP EXCEL2000を使用しています。
VBAで下記を実現したいのですが、力を貸してください。
本命.xls(A〜Eシートまで存在)があり、Aシートにボタンを配置し、
そのボタンに以下のようなVBAを組みました。
●引用開始
Application.ScreenUpdating = False '実行時動作の非表示
'既に1つ以上のウインドウが開いている場合は1つ残して全て閉じる If Windows.Count > 1 Then Do Until Windows.Count = 1 ActiveWindow.Close Loop End If
ActiveWindow.NewWindow Windows("本命.xls:1").Activate '2つのウインドウを上下に並べて整列 ActiveWorkbook.Windows.Arrange ArrangeStyle:=xlHorizontal Sheets("A").Select ActiveSheet.Range("C7").Select ActiveWindow.FreezePanes = True 'ウインドウ枠の固定 Windows("本命.xls:2").Activate Sheets("B").Select ActiveSheet.Range("C7").Select
ActiveWindow.FreezePanes = True 'ウインドウ枠の固定
Application.ScreenUpdating = True '実行時動作の表示 ●引用終了
実行後AシートとBシートが上下に並べて表示されます。
AとBの閲覧が終わったら、どちらかを手動で閉じて本命.xls
のウインドウのみとする前提です。
本命.xlsだけを開いている分にはいいのですが、本命.xlsで
作業している間に他のブックを開いたり、新規ブックを
作成するなど、本命.xls以外のブックのウインドウが存在すると、
Aシートのボタンをクリックした時に本命.xlsが閉じられてしまいます。
本命.xlsだけで作業する前提なら意図どおりに動くのですが、
他のブックを開いて本命.xls以外の作業したきたい時もあると思う
ので、他にいくつブックウインドウを同時に開いていても、
他のブックと本命.xlsのウインドウ1枚だけは残っている状態にしたい
のですがいい方法はないでしょうか?よろしくお願い致します。
最小化の状態でよければ、こんな感じでしょうか。 Sub Test() Application.ScreenUpdating = False For Each C In Workbooks MyBook = StrConv(C.Name, vbUpperCase) If MyBook <> "本命.XLS" And C.Name <> "PERSONAL.XLS" Then Windows(C.Name).WindowState = xlMinimized End If Next C For Each C In Workbooks MyBook = StrConv(C.Name, vbUpperCase) If MyBook <> "本命.XLS" And C.Name <> "PERSONAL.XLS" Then Windows(C.Name).WindowState = xlNormal Windows.Arrange ArrangeStyle:=xlHorizontal Application.ScreenUpdating = True Exit Sub End If Next C End Sub
(川野鮎太郎)
もしかしたら勘違いしていたかもしれません。 ご質問の本題はどこにあるのでしょうか。
(1)複数のブックが開いているときでも『本命.xls』のブックだけを新しいウインドウを開いて整列させたい。 『本命.xls』の2つのウインドウはC7セルでウインドウの固定をしたい。 このときに他のブックは閉じたい。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (2)複数のブックが開いているときでも『本命.xls』のブックだけを新しいウインドウを開いて整列させたい。 『本命.xls』の2つのウインドウはC7セルでウインドウの固定をしたい。
(1)であれば、上記で書いたように全てのブック名を確認していく。 該当しないブックだけ閉じるようにする。(上記では最小化にしてます)
(2)であれば、ぐっちょんさんのコードの以下の部分が不要ですね。 If Windows.Count > 1 Then Do Until Windows.Count = 1 ActiveWindow.Close Loop End If
(川野鮎太郎)
※初投稿ということで、通常の形式とは違うレスのつけ方に
戸惑いましたが、こういう編集も自由度が高くて便利ですね。
あの、でもすみません。改行はどうすればいいのでしょうか...(汗)
>...改行はどうすればいいのでしょうか... 文章の先頭に半角スペースを入れると、ほぼ書いたままの書き込みができます。 ←こんな感じ。 (kazu)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.