单元格更改传递值时运行宏

时间:2017-11-05 10:41:12

标签: vba

我在工作表事件单元格更改上有这个特定代码。当我在单元格A1上键入id_parameter时,它会在工作表上找到某些数据。

找到数据后,会将其写入此工作表。

现在,当我更改数据C列的值时,我想运行一个不同的宏。

我无法找到合适的程序。 Do_something()接收C列中更改的值。我希望我能够清楚地解释它。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Call Search_data
    End If
    'Data is written in B2:E10

    If Not Intersect(Target, Range("C2:C10")) Is Nothing Then
        Call Do_something(Target.Value)
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

您发布的代码按预期工作。问题很可能是由于Search_Data和/或Do_Something。

您更改单元格A1,然后更改B2中的所有单元格:E10。包括更改的C2:C10,以确保无法再次触发change_event。

names(dataframe)[4] <- metric

公共变量EventsDisabled将确保在给定用户输入时运行change事件,但在Worksheet_Change事件更改工作表时不会运行。否则你会遇到各种奇怪的循环,这些循环可能是无限的,或者至少需要很长时间。你的问题很可能也与此有关。确保您的Do_Something子具有正确的输入类型。您应该设置几个断点并打开下面的本地窗口: 在这里查看&gt;本地窗口,您可以看到所有变量和对象及其类型。您也可以输入:

Option Explicit
Public EventsDisabled As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If Not EventsDisabled Then
      EventsDisabled = True
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Call search_data
    End If
    'Data is written in B2:E10

    If Not Intersect(Target, Range("C2:C10")) Is Nothing Then
        Call do_something(Target.Value)
    End If
End If
End Sub

进入直接窗口,然后查看您需要在Do_Something签名中键入的类型。