【问题标题】:Run VBA Macro in Excel when a particular formula recalculates重新计算特定公式时在 Excel 中运行 VBA 宏
【发布时间】:2018-01-25 01:24:11
【问题描述】:

我不擅长 Excel 中的宏,我真的可以使用一些指导。需要运行一个如下所示的简单宏:

Public Sub CopyReplaceValue(rng1 As String)

Dim str1 As String
Dim str2 As String
Dim str3 As String
Dim rng2 As Integer

On Error GoTo LetsContinue

str1 = "N" ''this is your FRZ column
str2 = Range(rng1).Row ''Row number of updated cell
str3 = str1 & str2 ''FRZ cell to be changed

rng2 = Range(str3).Value 
If Sgn(Range(rng1)) <> Sgn(rng2) Then    
Range(str3).Value = 0    
ElseIf Abs(Range(rng1).Value) <= Abs(rng2) Then    
Range(str3).Value = Range(rng1).Value

End If    
LetsContinue:    
Exit Sub  
End Sub

现在棘手的部分是如何在需要时调用此宏。我希望rng1 成为我设置的范围中的一个单元格,然后我需要一个事件来触发调用。

问题是使用Private Sub Worksheet_Change(ByVal Target As Range) 似乎不起作用,因为完成的工作表只会在 RTD 链接和公式更新时发生变化。该事件似乎仅在我手动更改范围内的值时更新,这不是我在工作表完成后会做的事情。

当此范围内的单元格通过公式重新计算和/或更改时,是否有一种方法可以调用此宏,而无需人触摸工作表。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    尝试使用Private Sub Worksheet_Calculate()

    您可能需要在函数内创建一些来触发或不触发宏。

    【讨论】:

    • 对不起,我应该提到我已经尝试过使用它,但到目前为止还没有找到一种方法来防止它陷入无限循环。
    • @CraigKey 您需要在代码开头设置Application.EnableEvents = False(并在最后将其重置为True)。这将停止在您的代码运行时触发任何事件(即,由于您的代码所做的更改而导致的计算不会重新触发 Worksheet_Calculate 事件。)
    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 2018-04-15
    相关资源
    最近更新 更多