雛形シートを非表示にしておいて、必要時にコピーして利用するようにすることがあるんだけど、今回エラーに遭遇してしまったので備忘録。
コピーはシートの表示状態に左右される
このようなシートを用意した。
実際にシートの状態を確認するとこの様になっている。
Visibleプロパティ
Visibleプロパティはワークシートが表示されるかどうかを設定します。
各シートのVisibleプロパティを下記のように設定している。
シート名 | Visibleプロパティ |
---|---|
ws表示 | xlSheetVisible |
ws非表示 | xlSheetHidden |
wsとても非表示 | xlSheetVeryHidden |
Visibleプロパティのそれぞれの意味は下記の通り。
Visibleプロパティ | 内容 |
---|---|
xlSheetVisible | シートを表示します |
xlSheetHidden | ユーザーがメニューで再表示できるワークシートを非表示にします。 |
xlSheetVeryHidden | オブジェクトは非表示になります。このプロパティに再び xlSheetVisible を設定しない限り、オブジェクトは表示されません。また、ユーザー側でオブジェクトを表示することはできません。 |
実験のために次のようなコードを作成した。
Sub VisibleCopyTest() ws表示.Copy , Worksheets(Worksheets.Count) ws非表示.Copy , Worksheets(Worksheets.Count) wsとても非表示.Copy , Worksheets(Worksheets.Count) End Sub
それぞれのシートを一番右端にコピーするコードです。
早速動かしてみます。
「表示シート」と「非表示シート」はコピーできますが、「とても非表示シート」はコピーメソッドが失敗します。
xlSheetVeryHidden時のコピー対応法
この様な場合はVisibleプロパティをxlSheetVeryHiddenからxlSheetVisibleやxlSheetHiddenに変更する必要があります。
コード中でVisibleプロパティを一旦xlSheetVisibleに変更することでコピーすることが出来ました。
コピー後にVisibleプロパティをxlSheetVeryHiddenに戻しています。
雑感
今までも同じように雛形シートを非表示にしていたのにエラーになっていなかったのはxlSheetHiddenを使用していたのかな。
自分の中でコードを書くルールが定まっていないので毎回毎回思いつきで書いているのがわかりますね。