問題を次のテストケースに減らしました。
新しいワークブックを作成します。
定数値を入力します。たとえば、 ;に入力
123
します。Sheet1!A1
foo
式を参照する名前を定義します。たとえば、=CHOOSE(!$A$1, Sheet1!$A$1)
;定数値
1
をSheet2!A1
;に入力します。=foo
上の他のセルに数式を入力しますSheet2
。たとえば、次のようになります。Sheet2!B1
予想どおり、結果がSheet1!A1
上記の手順2で入力した値であることに注意してください。次のコードを含むVBAプロシージャを作成して実行します。
Sheets("Sheet1").Outline.ShowLevels 1
手順5のセルに#VALUE!
エラーが含まれていることがわかります。
さらに、単純なシートの再計算(F9キーまたはApplication.Calculate
メソッドを使用するかどうか)では問題は解決されません。代わりに、VBAからの完全なApplication.CalculateFull
再計算(メソッドを使用)またはインタラクティブUIからの完全な再構築CTRL( + ALT+を使用)を実行する必要があります。 SHIFT+F9キーの組み合わせ)。
試行錯誤の結果、この状態が発生することを確認しました。
index引数には、相対シートセル参照(定数または絶対シート参照ではない)が含まれて
CHOOSE()
いる必要があります。インデックス付けされる
CHOOSE()
value引数には、別のシートへの参照が含まれている必要があります。表示されるアウトラインレベルの変更は、VBAプロシージャ内から発生する必要があります(インタラクティブUIまたはVBAイミディエイトウィンドウのアウトラインコントロールからではありません)。と
メソッド呼び出し(引数は無関係)は、
ShowLevels
への値(インデックスではない)引数のいずれかで参照されるシートに適用する必要がありますCHOOSE()
。
どうしたの?
CHOOSE()
実際のワークブックを完全に再計算すること(まだ数秒)はUXの観点から望ましくないため、このエラーをトリガーせずに、値の引数の中で参照しているワークシートを最高のアウトラインレベルに折りたたむことを強く望んでいます。
回避策の提案(関数を含む定義済みの名前CHOOSE()
と相対シートのインデックス引数を使用している場合)は大歓迎です。
私のプラットフォーム:Windows 7 Home Premium(SP1、64ビット)上のExcel 2010(14.0.6123.5001、32ビット)。