2

さまざまなオプションを備えたコンボボックスがあります。すべてのオプションで、値に基づいて特定のセルがフォーマットされます。

値は数秒ごとに変化するため、プログラムは条件が満たされているかどうかを確認し続ける必要があります。プログラムが数秒ごとにシートをチェックできる方法を知っている人はいますか???

4

1 に答える 1

0

ニーズに応じて、3 つの異なるアプローチのいずれかがニーズを満たす可能性があります。

Excel の Worksheet_Change イベントは、ユーザーがワークシートを変更したときに発生します。再計算によるセルの数式の値の変更は除きますが、コードによる変更は含まれます。通常、VBA コードは次のようになります。

    Sub Worksheet_Change(ByVal Target As Range)
       Application.EnableEvents = False
       ' <test or set scope of action of the macro>
       ' <do something>
       Application.EnableEvents = True
    End Sub

Target 引数は組み込みであり、変更されてイベントをトリガーしたセルを常に参照します。コードは、標準モジュールではなく、ワークシート モジュール (ワークシート タブを右クリックして [コードの表示] を選択することで最も簡単にアクセスできます) に配置する必要があります。

Worksheet_Calculate イベントは、自動再計算を含め、ワークシートが再計算された後に発生します。コードは次のようになります。

    Sub Worksheet_Calculate()
       Application.EnableEvents = False
       ' <do something>
       Applicaton.EnableEvents = True
    End Sub

このイベントはターゲットを提供しないことに注意してください。つまり、単一のセルではなく、再計算されたすべてのセルに対してトリガーされます。コードが再計算を強制しない場合は、イベントを無効にしてから再度有効にする必要はありません。選択したセルだけをコードで再計算する場合は、計算を手動に設定し (Application.Calculation=xlManual)、手順を終了するときに自動にリセットします (Application.Calculation=xlAutomatic)。Worksheet_Change イベントと同様に、コードはワークシート モジュールに配置する必要があります。

最後に、タイマーを設定して、Excel の Application.OnTime イベントまたは Windows タイマーを使用してコードを定期的に再実行することもできます。プロシージャには、タイマーを開始および停止するコードを含める必要があります。OnTime イベントの使用例については、この SO answerを参照してください。Windows タイマー (および Application.OnTime イベント) の使用の説明については、Chip Pearson のレビューを参照してください

于 2013-01-10T22:19:10.333 に答える