How fire EXCEL event BeforeDoubleClick BEFORE SelectionChange?

半城伤御伤魂 提交于 2020-02-21 13:39:54

问题


I want to fire the BeforeDoubleClick-event BEFORE the SelectionChange-event for an EXCEL work-sheet.

The order is normally the other way round: SelectionChange-event first, and later BeforeDoubleClick-event.

My goal is to either run MyDoubleClickCode, if there a double-click, or if NOT, run MyChangeSelectionCode.

The problem relies in the order of event-triggering!

My best solution comes here:

    ' This Event is **MAYBE** fired secondly and runs the MyDoubleClickCode
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        dblFlag = true
        ...
        MyDoubleClickCode
        ...
    End Sub

    ' This event is always fired AND runs first
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        dblFlag = false
        alertTime = Now + TimeValue("00:00:01")
        Application.OnTime alertTime, "MyChangeSelectionSub"
    End Sub

    ' Userdefined subroutine which will run one second after an event ( doubleclick or not).
    public sub MyChangeSelectionSub() 
        If NOT dblFlag then
            ...
            MyChangeSelectionCode
            ...
        End if
    End Sub

I use OnTime in my SelectionChange-event to call the MyChangeSelectionSub one second after a selection-change is triggered. This gives times to handle an BeforeDoubleClick-event and do the MyDoubleClickCode - if the cell was also double-clicked. My wanted logic is reached , BUT...

... it is of course very clumpsy and not satisfying: I have to wait one second before the MyChangeSelectionSub starts, instead of just after the BeforeDoubleClick-event has been dealed with.

Maybee there is a kind of logic to make this happend? Any idea?

EDIT: I've edited the code-exampel to be more clear about my problem! And I know now that I can't change the order of events, but how to not use the onTime solution??


回答1:


This "works" for me, but it doesn't seem stable. Probably the timing of the OnTime method causes an "uncomfortable pause" in execution that we might need to accept. (or improve upon.)

'worksheet (Name) is "Sheet17" in the VBA Properties window
'worksheet Name is "Sheet1" as shown in the worksheet tab in the application Excel

Private double_click_detected As Boolean
Private SelectionChange_target As Range

' This Event is **MAYBE** fired secondly and runs the MyDoubleClickCode
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  double_click_detected = True
  '...
  MsgBox "MyDoubleClickCode"
  '...
End Sub

' This event is always fired AND runs first
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set SelectionChange_target = Target
    alertTime = Now + TimeValue("00:00:01")
    Application.OnTime alertTime, "Sheet17.MyChangeSelectionSub"
End Sub

' Userdefined subroutine which will run one second after an event ( doubleclick or not).
Public Sub MyChangeSelectionSub()
  If Not double_click_detected Then
    '...
    MsgBox "MyChangeSelectionCode"
    '...
  End If
End Sub


来源:https://stackoverflow.com/questions/42327099/how-fire-excel-event-beforedoubleclick-before-selectionchange

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!