在形状/按钮单击事件中激活已编辑单元格的工作表的触发更改事件

时间:2017-05-17 10:50:54

标签: excel vba excel-vba

我有一个可点击形状的工作表和一个听取该工作表更改事件的类:

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激活其他一些单元格对我来说都不起作用。

1 个答案:

答案 0 :(得分:0)

我发现了两个“黑客”,第一个非常有限,但第二个完成了工作:

  1. Selection.Cut

    Public Sub Shape_click()
      Selection.Cut Selection
      Debug.Print "click"
    End Sub
    

    它使Change事件触发3次(在“click”之前2次,之后1x),每次都使用正确(更改)值。

    当然,您需要检查Selection(如果已设置,如果是Range类型等)。

    解决方案非常有限,因为您无法在选择中使用合并的单元格(将询问您是否要取消合并)。

  2. Selection.Value = Selection.Value

    Public Sub Shape_click()
      Selection.Value = Selection.Value
      Debug.Print "click"
    End Sub
    

    即使合并的单元格也能正常工作。还需要检查Selection是否确实包含范围。