Ermitteln ob letzter Befehl einen Seitenumbruch erzeugt hat?

Moderator: ModerationP

Ermitteln ob letzter Befehl einen Seitenumbruch erzeugt hat?

Beitragvon ballslicer » 13. Nov 2019, 20:30

Hallo Office-/(VBA-)Gemeinde,

ich hätte da mal eine Frage:

kann man ermitteln, in welchem Abschnitt sich der Cursor befindet? Ich denke ja. Selection.Information(wdActiveEndSectionNumber)
Gibt es eine Möglichkeit festzustellen ob eine bestimmte Taste gedrückt wurde (z.B. "Return") Ich denke ja: Application.OnKey "{~}, "auszuführendes_Makro_wenn_Enter_gedrückt"

Ich möchte nun beides zusammenbringen: Wenn/Solange ich mich in einem bestimmten Abschnitt befinde, soll dies in "regelmäßigen/periodischen Zeiträumen im Zentel- oder Hunderstel-Sekundenbereich geprüft werden"
um festzustellen ob beim "Enter-Drücken" ein Seitenumbruch verursacht wurde, weil der nachfolgende "zusammenhängende Anschnitt" nicht mehr auf die Seite gepasst hat.

Also vielleicht mit Application.OnTime oder so.

Jemand eine Idee ob sowas möglich ist und wenn ja wie man das hinkriegen könnte?
Wenns totaler Schmarrn ist, akzeptier ich das freilich auch ;-)

Gruß und Dank vorab.

Ballslicer
ballslicer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 54
Registriert: 06. Dez 2011, 16:11

Re: Ermitteln ob letzter Befehl einen Seitenumbruch erzeugt

Beitragvon theoS » 16. Nov 2019, 14:54

So einfach ist daa nicht. Verwechsle bitte nicht Abschnitt mit Seitenwechsel. Auch wenn es einen Seitenwechsel gibt der mit einem Abschittswechsel einhergeht. Es gibt auch Abschnitte die fortlaufend sind.
Das erledigst du einfacher mit der Seitenzahl . Dann kannst du das in eine Routine einbauen, die dir deine Tasten abhört, aber das bremst Word ziemlich aus.
Wenn es dir darum geht, wie der Textsatz aussieht, mach das wie das eigentlich bei Textverarbeitung gedacht ist: kümmere dich erst um den Inhalt, dann um die Form.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4878
Registriert: 19. Apr 2008, 00:14

Re: Ermitteln ob letzter Befehl einen Seitenumbruch erzeugt

Beitragvon theoS » 16. Nov 2019, 23:23

Hab so was mal gemacht um einen CodeHilighter zu basteln. Ist aber schon ewig her, drum geb ich mal den Code einfach so. Da sind noch ein paar andere Taste abgefangen, aber die erste Zeile ist die die Enter abfängt.

Zb für einen KeyCatcher brauchst du so was in der Art:

Code: Alles auswählen
Type KeyboardBytes
  kbb(0 To 255) As Byte
End Type

Declare Function GetKeyboardState Lib "User32.dll" _
  (kbArray As KeyboardBytes) As Long

Sub TasteESCabfangen()
Dim rngAtuB As Range
  Dim kbArray As KeyboardBytes
  Call CodesEinlesen
  Do
    DoEvents
      GetKeyboardState kbArray
   
       Set rngAtuB = Selection.Words(1)
    If kbArray.kbb(13) And 128 Then  'enter
        Call auslager(13)   'mit der 13 ruft es immer den Farbwechsel zu schwarz auf.
    ElseIf kbArray.kbb(38) And 128 Then    'PfeilRauf
        Set rngAtuB = Selection.Next(wdLine, 1)
        Call BlauMacher2(rngAtuB)
     ElseIf kbArray.kbb(40) And 128 Then    'PfeilRunter
        Set rngAtuB = Selection.Previous(wdLine, 1)
        Call BlauMacher2(rngAtuB)
        Debug.Print rngAtuB.Text
       ElseIf kbArray.kbb(32) And 128 Then 'Leerzeichen
'       boinOut = True
       Call auslager(1)
End If
  ' Makro beenden mit ROLLEN
  Loop Until kbArray.kbb(145) And 128 'Rollen
End Sub


Dazu ein Klassenmodul:
Code: Alles auswählen
Public WithEvents appWord As Word.Application
'DAs Ding brauch ich  um die Änderungen auch beim verlassen der Markierung zu checken
'starten mit nebending/aufrufAuswahl
Public zWar As Long, rngBM As Range
Private Sub appWord_WindowSelectionChange _
        (ByVal Sel As Selection)
   
fedTK
   Sel.Bookmarks.Add ("GradeEbenWarIchDort")
End Sub

Sub fedt()
Dim wo1 As Word
Set wo1 = Selection.Words(1)
wo1.Range.Font.Bold = True
End Sub

Sub fedTK()
Dim rng22 As Range

If ActiveDocument.Bookmarks.Exists("GradeEbenWarIchDort") Then
    Set rngBM = ActiveDocument.Bookmarks("GradeEbenWarIchDort").Range.Duplicate
    Set rngSel = Selection.Range.Duplicate
    zWar = rngBM.Information(wdFirstCharacterLineNumber) - rngSel.Information(wdFirstCharacterLineNumber)
End If
    If zWar < 0 Then
        Set rng22 = Selection.Previous(wdLine, Abs(zWar))
    ElseIf zWar > 0 Then
        Set rng22 = Selection.Next(wdLine, Abs(zWar))
    Else
        Set rng22 = Selection.Range
    End If
If Not rng22 Is Nothing Then
    txt = rng22.Text
        start_point = InStr(txt, "--")
        If start_point > 0 Then
        rng22.Font.ColorIndex = wdGreen
'        rng22.Font.Italic = True
        End If
End If
'Selection.Bookmarks.Add ("GradeEbenWarIchDort")
End Sub



Beim Öffnen des Doks dann sowas in der Art:

Code: Alles auswählen
Private Sub Document_Open()
 Call TasteESCabfangen
End Sub
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4878
Registriert: 19. Apr 2008, 00:14

Re: Ermitteln ob letzter Befehl einen Seitenumbruch erzeugt

Beitragvon theoS » 20. Nov 2019, 21:25

Dann melde ich mich hier auch noch mal, nachdem wir schon per PN ausgetauscht haben.
Hier spielt die Funktion "Erste Seite anders" einen Streich. Durch die verschiedenen Abschnitte kommt die hier durcheinander und du kriegst die gleiche Fußzeile auf der anderen Seite wieder hergezaubert.
Mögliche Lösung:
Du fügst so viel Leerraum ein, dass eine zweite Seite entsteht und hebst die Verknüpfung zur vorherigen Fußzeile auf (ggf. auch die Kopfzeile). Dann löschst du die FZ von der zweiten Seite manuell und gestaltest sie wie du sie brauchst (Seitenzahl, Logo etc.)
Jetzt kannst du den Leerraum wieder entfernen und den Schutz anwenden.
Abschnitte sind in Verbindung mit "erster Seite anders" immer tückisch. Jeder Abschnitt hat ja im Prinzip eine eigene "erste Seite" drum sollte man auf diese Funktion tunlichst verzichten wenn man Abschnitte verwendet.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4878
Registriert: 19. Apr 2008, 00:14


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast