簡體   English   中英

更改單元格時,VBA運行宏,但如果是宏,則運行宏

[英]VBA run a macro when cell is changed, but not if by a macro

好吧我不確定這是否容易實現,但我會嘗試。

如果單元格被更改,我使用此子程序執行一些宏:

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

這工作正常,但我有點問題。

在上面的單元格改變子中引用的單元格B4的值由命名范圍確定,該范圍是動態的並且包含另一個工作表上的值列表。 我使用數據驗證工具使B4成為包含命名范圍內容的下拉列表。

我有另一個宏,其目的是更新此列表。 它的作用是清除當前列表,查詢數據庫並將一組值輸出到該范圍內。 麻煩的是,當運行此宏時,它會導致B4的值發生變化(因為B4引用了該范圍內的值)。 這反過來導致我的“單元格更改”宏運行拋出錯誤。

當我更新它引用的列表時,有沒有辦法防止“單元格更改”宏運行?

希望這個問題有道理。

您可以使用Application.EnableEvents禁用Worksheet_Calculate事件,如下所示。 請注意,這將禁用Application.EnableEvents = FalseApplication.EnableEvents = True之間可能發生的任何WorkSheetWorkBook事件。

因此,如果您的其他子運行方式如此 - Worksheet_Calculate事件將不會觸發

Sub Other_Sub()
Application.EnableEvents = False
[b4].Value = "10"
'other stuff
Application.EnableEvents = True
End Sub

沒關系,我已經找到了一個簡單的解決方案:如果B4包含錯誤或者是空白,只需在條件語句中說不執行“init”。

並注意(退出子)或(退出函數)...不要忘記在(退出子)或(退出函數)命令之前使用Application.EnableEvents = True(如果存在)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM