2017-05-17 161 views
1

我有一个可点击的形状和类收听到片材的变化事件的工作表:触发改变事件点击事件

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 

当我在Sheet编辑单元格并直接在形状单击输出是

click 
change: $B$1 

我想触发形状宏中的更改事件,以便在打印“单击”之前发生更改事件。 DoEvents,来自kernel32的睡眠以及来自Shape_click的其他一些单元的激活对我来说都不起作用。

+0

也许activecell.calculate –

+0

'ActiveCell.Calculate'不工作对我来说,变化也是'Debug.Print' –

+0

@PatrickLepelletier我已经找到了更好的解决方案后触发,看到我的回答 –

回答

0

我已经发现了两个“黑客”,第一个非常有限的,但第二个做工作:

  1. Selection.Cut

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

    这使得更改事件触发3时间(“点击”之前的2倍,之后的1倍),每次使用正确(更改)的值。

    当然,你需要检查Selection(如果它被设置,如果是Range类型等)

    解决的办法很有限,因为你不能在选择合并单元格使用它(会问你是否想解除他们)。

  2. Selection.Value = Selection.Value

    即使合并单元格的作品。如果确实包含范围,还需要检查Selection

+0

的simples解决方案将change sub放入子库中的正常模块中,即调用change和打印前。这样它的干净 –