VBA更改值以调用宏。忽视

时间:2018-06-30 15:42:26

标签: excel vba function

Hello Stack溢出社区!我是VBA脚本的主要Noob,认为我有一个简单的问题?我的工作表上有一些简单的代码,每次在特定单元格中更改值时都会调用一个函数。

问题在于,单元格是一个下拉菜单,当您将下拉菜单的选择更改为相同的值时,它仍然运行代码。

要清楚,我希望代码在下拉列表更改时运行。只是当它“更改”为相同值时不是。在下面粘贴我的代码。让我知道您能否提供帮助!


Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$W$21" Then
        Call Financing
    End If
End Sub

我在想也许添加.ignore之类的东西?

1 个答案:

答案 0 :(得分:0)

保留前一个值的静态值并在启动Financing子过程之前进行比较。

Private Sub Worksheet_Change(ByVal Target As Range)
    static oldW1  as variant
    If Target.Address = "$W$21" Then
        if target.value <> oldW1 then
            oldW1 = Target.value
            Call Financing
        end if
    End If
End Sub

静态变量由声明它们的子过程或函数“记住”。通常,当Worksheet_Change完成并退出时,oldW1将被“遗忘”(并销毁)。但是,对于静态oldW1,第二次(及其后所有次)都输入Worksheet_Change,它“记住” oldW1的值是上次使用它的值。

这并不意味着静态var是全局公开的;它仅在声明它的函数或子过程中可用。