4

これが簡単に達成できるかどうかはわかりませんが、試してみます。

セルが変更された場合、このサブを使用していくつかのマクロを実行します。

Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Range("b4")
If Not Intersect(target, Range("b4")) Is Nothing Then
Call init
End If
End Sub

これは問題なく動作しますが、少し問題があります。

cellB4は、上記の cell change サブで参照されているように、動的で別のシートの値のリストを含む名前付き範囲によって決定される値を持ちます。データ検証ツールを使用してB4、名前付き範囲の内容を含むドロップダウン リストを作成します。

このリストを更新することを目的とした別のマクロがあります。現在のリストをクリアし、データベースにクエリを実行して、一連の値を範囲に出力します。問題は、このマクロを実行すると の値がB4変化することです (B4範囲内の値を参照するため)。これにより、「セル変更」マクロが実行され、エラーが発生します。

参照するリストの更新中に「セル変更」マクロが実行されないようにする方法はありますか?

その質問が理にかなっていることを願っています。

4

3 に答える 3

10

You can disable the Worksheet_Calculate Events by using Application.EnableEvents as below. Please note this will disable any WorkSheet or WorkBook event that may occur in-between Application.EnableEvents = False and Application.EnableEvents = True

So if your other sub was run like this - the Worksheet_Calculate event won't fire

Sub Other_Sub()
Application.EnableEvents = False
[b4].Value = "10"
'other stuff
Application.EnableEvents = True
End Sub
于 2012-11-07T10:46:30.277 に答える
1

気にしないでください、私は簡単な解決策を見つけました.B4にエラーが含まれているか空白の場合は「init」を実行しないという条件文を入れるだけです.

于 2012-11-07T10:48:51.430 に答える
1

(exit sub) または (exit function) に注意してください... (exit sub) または (exit function) コマンドの前に Application.EnableEvents = True を使用することを忘れないでください (存在する場合)。

于 2015-04-09T12:55:55.177 に答える