|
おはようございます。
>隠しシートを使っている事をわからないようにして
>且つ、Volatileメソッドを用いない方法を考えてみました。
>
>名前を使います。
>一例として、Sheet3の L3:N3 に lmn と名前を付けます。
>名前を見られたくなければ非表示にします。
>
>マクロでは以下。
> ActiveWorkbook.Names.Add(Name:="lmn", RefersTo:="=Sheet3!$L$3:$N$3").Visible = False
>
>ユーザー関数は以下。
>Function koi(xx As Long, rg As Range)
> koi = rg(xx)
>End Function
>
>セルに、
>=koi(1,lmn)
>=koi(2,lmn)
>=koi(3,lmn)
>と記述します。
これだとVolatile要りませんね!!
メモメモ、ありがとうございます。よく覚えておきます。
これも可能性として、
上記例でlmnの参照内容は、
基本的には見えません(VBA、Excel4Makuro等の使用を除く)。
が、
「挿入」---「名前」---「定義」でlmnと指定すれば、削除も参照の変更も可能です。
「名前の定義なんて、触らないから大丈夫!!」ということでしたら、
大きなお世話ですが、何らかのフェイルセーフを用意しておいたほうが良いかも
しれませんよ!!
例
Workbook_Open()イベントにて再定義する等など
それと
>ブックの保護で何とか破壊は防ごうと思ってますが、関数の積み重ねは今後も続くと思うので
>修正の際保護をかけ忘れるかもしれません。そうした場合でも隠しシートの存在
>がわからなければファイル破壊は防げそうだと考えたわけです。
という箇所を再度読み返しました。
これ、そもそもはこの隠しシートの内容が破壊されないための処置ですよね!!
ブックの保護をし忘れた場合、「書式」---「シート」---「再表示」で
対象シートが触れてしまうことを懸念されているのでしょうか?
だとしたら、
VBEにて(Excelからでも可能ですが説明の都合上)、
プロジェクトエクスプローラーにて、
・非表示を行う対象シートを選択
・選択した状態でF4を押します。プロパティウインドーが表示されます。
・このプロパティの表内のVisibleを2のxlsheetVeryHiddenに設定します。
これでExcelからは、ブックの保護の有無に関わらず、再表示が出来ません。
つまり、隠しシート名の公開が問題にならないと思うのですが、
私の意味の取り違いえでしょうか?
|
|