在形状/button单击事件中触发具有激活的编辑单元格的工作表的更改事件
我有一个可点击形状的工作表和一个监听该表的更改事件的类:
工作表Sheet1:
Public Sub Shape_click() Debug.Print "click" End Sub
1类:
Private WithEvents sh As Worksheet Private Sub Class_Initialize() Set sh = Sheet1 End Sub Private Sub sh_Change(ByVal Target As Range) Debug.Print "change: " & Target.Address End Sub
在Sheet1中编辑单元格时,直接单击输出的形状
click change: $B$1
我想触发形状macros中的更改事件,以便在打印“单击”之前发生更改事件。 DoEvents,来自kernel32的睡眠以及来自Shape_click的一些其他单元的激活对我来说都不起作用。
我find了两个“黑客”,第一个非常有限,但第二个做这个工作:
-
Selection.Cut
:Public Sub Shape_click() Selection.Cut Selection Debug.Print "click" End Sub
它使Change事件触发3次(在“click”之前是2倍,在之后是1倍),每次使用正确(更改)的值。
当然,你需要检查
Selection
(如果它被设置,如果是Range
types等)该解决scheme是相当有限的,因为你不能在select合并的单元格中使用它(会问你是否想取消它们)。
-
Selection.Value = Selection.Value
Public Sub Shape_click() Selection.Value = Selection.Value Debug.Print "click" End Sub
甚至与合并的单元格一起工作。 如果确实包含范围,还需要检查
Selection
。