category name  »  page title date

窓を開けたり閉じたり

窓といっても、新しくウィンドウを開くのではなく、ワークシートの一定の部分を閉じたり開いたりする窓です。一定の部分というのは、行であったり、列であったりしますが、使い道にもよるでしょう。筆者の場合は、列の開け閉めをよくやります。

<使い道>
(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