单元格值更改事件和运行连续宏

时间:2014-04-29 14:19:50

标签: excel excel-vba excel-2010 vba

我希望我的宏在Sheet1打开时自动运行并且在B列的任何下拉菜单中更改了值。我假设我可以编写几个事件监听器包装器,例如:

' pseudocode    
While Sheet1 is open
        When a dropdown value is changed in column B
            Call Update
        End When
End While

我在网上找到了一些链接,但我不太明白。在这些链接中,它们的代码指的是Target。 Target是命名范围吗?我没有运气实现这些。我认为这些链接可以解决我的问题。
http://www.mrexcel.com/forum/excel-questions/95341-running-macro-continuously.html
http://msdn.microsoft.com/en-us/library/office/ff839775(v=office.15).aspx

由于

2 个答案:

答案 0 :(得分:4)

您可以使用工作表事件宏:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rB As Range
    Set rB = Range("B:B").Cells.SpecialCells(xlCellTypeAllValidation)
    If Intersect(Target, rB) Is Nothing Then
    Else
        Application.EnableEvents = False
            Call Update
        Application.EnableEvents = True
    End If
End Sub

因为它是工作表代码,所以很容易安装和自动使用:

  1. 右键单击Excel窗口底部附近的选项卡名称
  2. 选择查看代码 - 这会打开一个VBE窗口
  3. 粘贴内容并关闭VBE窗口
  4. 如果您有任何疑虑,请先在试用工作表上试用。

    如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      要了解有关事件宏(工作表代码)的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/event.htm

      必须启用宏才能使其生效!

答案 1 :(得分:1)

您需要的是与此类似的Worksheet_Changed事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Column("B")) Is Nothing Then
        Application.EnableEvents = False
        Call Update
        Application.EnableEvents = True
    End If
End Sub

如果在B列中进行了任何更改,则会触发。目标由应用程序事件提供,并且是进行更改的范围。

编辑: 您需要将其放在工作表的代码中,而不是模块中。如果右键单击excel屏幕底部的工作表选项卡,其中一个选项是视图代码。