窓といっても、新しくウィンドウを開くのではなく、ワークシートの一定の部分を閉じたり開いたりする窓です。一定の部分というのは、行であったり、列であったりしますが、使い道にもよるでしょう。筆者の場合は、列の開け閉めをよくやります。
<使い道>
(1) めったに変更することがなく、画面に常時表示しておく必要もないけど、ときどき確認してみたくなるパラメーターなどを、普段は隠しておいて、必要なときに開示する。
(2) 開発段階あるいは管理のために必要なボタンやパラメーターを隠しておいて、ゲストはここには来ないでねと意思表示しておく。でも、オーナーは簡単に開けられる。
(3) 動きがあるので、順番に開いて閉じてを繰り返したりさせれば、何かおもしろいことができるかも。試してはいません。
下に例示した図は、最初が (1) の例、次が (2) の例です。窓の脇に開閉ボタンがついています。
開いた窓の中には、そのワークシートの内容と密接な関係のあるボタンやパラメーターがはいっていて、いっしょに見ることができるので、便利です。普段は余計なものを見せない、というのがエレガントだと思うのですが、いかがでしょうか?
以下は、窓の開閉のために使うプロパティ WindowOpen のもっとも簡単な例です。
WindowOpen = True で窓を開き
WindowOpen = False で窓を閉じます
窓の範囲は、openColumns で A,B 列、開いた時の列幅は openWidth で 16 としました。
標準モジュール WindowOpen
Private Const openColumns = "A1:B1" Private Const openWidth = 16 Public Property Let WindowOpen(sw) Dim width width = 0: If sw Then width = openWidth ActiveSheet.Range(openColumns).ColumnWidth = width End Property
余計なことではありますが、ぱっぱっと開閉するのではなく、すうっと滑るように開閉するのもやってみました。余計なことではありますが、お遊びです。使い方は上に同じ。
標準モジュール WindowOpenAction
Private Const openColumns = "A:B" Private Const openWidth = 16 Private Const interval = 25 Public Property Let WindowOpenAction(sw) Dim startWidth, endWidth, stepWidth, width startWidth = openWidth: endWidth = 0: stepWidth = -1 If sw Then startWidth = 0: endWidth = openWidth: stepWidth = 1 For width = startWidth To endWidth Step stepWidth ActiveSheet.Range(openColumns).ColumnWidth = width Application.Wait [now()] + interval / 86400000 Next End Property