我希望我的宏在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
由于
答案 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
因为它是工作表代码,所以很容易安装和自动使用:
如果您有任何疑虑,请先在试用工作表上试用。
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要了解有关宏的更多信息,请参阅:
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屏幕底部的工作表选项卡,其中一个选项是视图代码。