2

何年にもわたってプロジェクトの回収に使用されるワークブックがあります。ThisWorkbook に結果ワークシートをロックするコードを設定しましたが、ユーザーが列グループを開いたり閉じたりできるようにしました (各年の月の列を非表示または非表示にできるようにするため)。うまく機能する私の現在のコードは、次のようになります。

Sheet10.Protect Password:="password", UserInterfaceOnly:=True
Sheet10.EnableOutlining = True

Sheet11.Protect Password:="password", UserInterfaceOnly:=True
Sheet11.EnableOutlining = True

さらに4枚のシートについても同様です(そして機能します)。

私がやりたいことは、シート識別子を格納する変数を定義し、実際のコードで For Each / Next ループを実行することです。

しかし、コンパイル エラーまたは実行時エラーをスローしない変数宣言を機能させることはできません。

好きな建築は

Dim wSheet as Worksheet
wSheet = Array(Sheet10, Sheet11, Sheet14)

For Each wSheet in Workbook
    wSheet.Protect Password:="password", UserInterfaceOnly:=True
    wSheet.EnableOutlining = True
Next wSheet

しかし、私の設定wSheetでは失敗します...いくつかのバリエーションを試しましたが、ほとんどの場合、その2行目で失敗します(シートインデックス、シート名などを使用するかどうかは関係ありません)。何かご意見は?

4

2 に答える 2

1

コードの問題は、最初の行の宣言です。

Dim wSheet as Worksheet

配列宣言にするか:

Dim wSheet() as Worksheet

または、次のようなバリアントにします。

Dim wSheet as Variant

またはこれ:

Dim wSheet
于 2013-06-25T13:04:04.177 に答える