我有一个可点击形状的工作表和一个听取该工作表更改事件的类:
Sheet 1中:
Public Sub Shape_click()
Debug.Print "click"
End Sub
的Class1:
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
我想在形状宏中触发更改事件,以便在打印“单击”之前发生更改事件。 DoEvents,从kernel32中休眠以及从Shape_click激活其他一些单元格对我来说都不起作用。
答案 0 :(得分:0)
我发现了两个“黑客”,第一个非常有限,但第二个完成了工作:
Selection.Cut
:
Public Sub Shape_click()
Selection.Cut Selection
Debug.Print "click"
End Sub
它使Change事件触发3次(在“click”之前2次,之后1x),每次都使用正确(更改)值。
当然,您需要检查Selection
(如果已设置,如果是Range
类型等)。
解决方案非常有限,因为您无法在选择中使用合并的单元格(将询问您是否要取消合并)。
Selection.Value = Selection.Value
Public Sub Shape_click()
Selection.Value = Selection.Value
Debug.Print "click"
End Sub
即使合并的单元格也能正常工作。还需要检查Selection
是否确实包含范围。