3

私の知る限り、Application.ScreenUpdating = trueの値は、Application.ScreenUpdating=falseが設定されるまで維持されます。しかし、この値の「寿命」は何ですか?呼び出されたプロシージャが開始および終了している間、ワークシートが開いている間ですか、それともですか?

ScreenUpdatingの値を私のニーズと一致させるためのクラスを作成しました。

  • Initクラス
  • ScreenUpdating=Falseを設定します
  • 手順の終了時またはエラーの場合は、値をTrueに復元します。

クラスはこのケースを問題なく処理します。

場合によっては、反対のことが必要になります。

  • Initクラス

  • ScreenUpdating=Trueに設定します

  • 手順の終了時またはエラーの場合は、値をFalseに復元します。

    ここで問題が発生しています。クラスは値ScreenUpdating=falseを適切に設定しますが、クラスがScreenUpdatingの「実際の」値を取得すると、常にtrueになります。値を変更する可能性のある他の手順やアドインはありません。

上記のポイントを示すテストシートを用意しました。「suCaller」ボタンの上にあるドロップダウンからScreenUpdatingの値を選択します。

  • Falseを選択し、ボタンを押します。
  • Falseを設定する前の値は、期待どおりTrueです。
  • テストデータは、ScreenUpdating new value(False)を示す別の手順から入力されます。
  • データ入力後、値はTrueにリセットされます。
  • ボタンをもう一度押すと、「実際の」値は期待どおりにTrueになります。
  • 何度も実行すれば、値は問題ないはずです。

次に、[True]を選択して、ボタンを押します。

  • Trueを設定する前の値は期待どおりにTrueです(これは上からの値です)
  • ScreenUpdating new value(True)を示すテストデータが再度入力されます
  • データ入力後、値はFalseにリセットされます。
  • ボタンをもう一度押すと、「実際の」値はFalseではなくTrueになります。

クラスは復元値を定義するために新しい値を否定するだけなので、結果は存続期間やScreenUpdating値の設定方法について私を混乱させます。

私はクラスで何か間違ったことをしているのですか、それともいくつかの基本的な理論が欠けていますか?

クラスモジュール:ApplicationScreenUpdate

テストモジュール:テスト

テストシート TIA、オスカー。

4

2 に答える 2

0

ScreenUpdating または DisplayAlerts 値の有効期間は、値が変更された最上位の手順であることがわかりました。手順の最後に; 値が false に設定されていた場合でも、このプロパティの値は常に TRUE に復元されます。

一方、EnableEvents または Calculation は、値が変更されたプロシージャの最後にその値を保持し、TRUE または FALSE でした。

このワークブックを開き、次の順序でメソッドを実行します。

  • TestFalse
  • TestCurrentValues
  • テスト値
  • TestCurrentValues
  • 復元値
  • TestCurrentValues

各メソッドを実行した後、シートの値を確認してください。

どのアプリケーション プロパティが他のプロパティの値を変更するかを確認できません。しかし、ジェームズが書いたように、「設計によって」独自の値を変更するものもあります

于 2013-02-17T21:42:42.637 に答える
0

私が知る限り、これは仕様による動作です (ただし、引用できる情報源はありません)。

経験豊富な開発者は設定が維持されることを期待しますが、経験の浅い開発者はおそらく自分が行ったことに気づかず、マクロの完了後にシートに手動でデータを入力しようとすると、Excel が壊れていると考えるでしょう。

値をリセットできる場合があるため、アプリケーション イベントを無効にすることもできます。また、更新を false に設定した後に値を書き込んでみることもできますが、マクロの実行後にその値が表示されると思われます。

于 2013-02-13T11:19:10.613 に答える