Wątek przeniesiony 2021-09-16 10:10 z Inne języki programowania przez cerrato.

Obsługa zdarzenia WindowSelectionChange

0

Mam takowy problem z obsługą zdarzenia SelectionChange - nie zawsze wskakuje do procedury. Mam poustawiane odpowiednie breakpointy i niestety, nie wskakuje i już. Oto kod (który akurat mało ma wspólnego z problemem, bo i tak się nie wykonuje):

Public WithEvents appWord As Word.Application

Private Sub appWord_WindowSelectionChange(ByVal Sel As Selection)
Dim selStart As Long
Dim selEnd As Long

    If frmListyMetadanych.Visible = True Then
        Exit Sub
    End If
    
    selStart = Sel.Start
    selEnd = Sel.End
    
    If Sel.Comments.Count <> 0 Then
        Sel.Comments(1).Range.Select
        If InStr(Sel.Comments(1).Range.Text, PREFIX_META) > 0 Then
            Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
            Sel.End = Sel.Start
        Else
            Sel.Start = selStart
            Sel.End = selEnd
        End If
    End If
End Sub

Dodam jeszcze, że pod Worda podpięte są również inne szablony. Jest wśród nich jeszcze jedna obsługa tego zdarzenia, ale tam też breakpoint jest, a nie zatrzymuje się tam kod.

Czasem np. działa, póki nie uruchomię formatki frmListyMetadanych - od tej pory nie działa. Innym razem nie działa od początku otworzenia dokumentu.

0

Każde naciśnięcie STOP w VBA Editorze, tak samo jak każdy rzucony wyjątek, dla którego klikniesz End w komunikacie błędu (a nie możesz kliknąć nic innego, jeżeli szablon z błędem nie jest otworzony), zeruje zmienne w klasach, a co za tym idzie odpina wszystkie zdarzenia.

To nie magia, to VBA.

Rozwiązania są dwa - albo restartujesz sobie Worda, albo odpalasz procedurę, która podepnie zdarzenia z powrotem:

Public Sub CreateEventHandler()
    Set GbEventHandler = New clsEventClassModule
    Set GbEventHandler.appWord = Word.Application
End Sub

1 użytkowników online, w tym zalogowanych: 0, gości: 1