none
Wie kann man Zeilennumer in Word2007-Dok. mit VBA ermitteln RRS feed

  • Frage

  • Hallo zusammen,

    wenn man im Word-Dokument Zeilennummern ermitteln will, geht es nur so, dass man die Zeilennummer in der der Cursor sich befindet, immer nur relativ zur aktuellen Seite ermitteln kann mittels

    Public Function GetPageNum(r As Range) As Integer
         'current page
        GetPageNum = r.Information(wdActiveEndPageNumber)
    End Function
    
    Public Function GetLineNum(r As Range) As Integer
         'linenumber relative to current page
        GetLineNum = r.Information(wdFirstCharacterLineNumber)
    End Function

    Wie kann man aber die absolute Zeilennummer in Bezug auf das gesamte Dokument ermitteln?
    (Bei 'Gehe zu Zeile' kann man ja auch die absolute Zeilennummer angeben...)

    Grüße-


    Dietrich


    Mittwoch, 27. April 2016 22:05

Antworten

  • Selection.Range.ComputeStatistics(Statistic:=wdStatisticLines)

    bekomme ich die gleiche Zeilennummer wie in vorhergehenden Beispiel: GetAbsoluteLineNum.

    Naja, aber doch nur wenn Du vom Anfang des Dokumentes alles bis zur Position markierst...?

    Außerdem "spinnt" das ein bißchen direkt am Zeilenanfang...

    Aber die Idee ist gut, ich hätte da eine Alternative.

    Andreas.

    Function GetLineNumberAbs(Optional ByVal R As Range) As Long
      'Returns the line number absolute in the document
      If R Is Nothing Then Set R = Selection.Range
      GetLineNumberAbs = R.Information(wdFirstCharacterLineNumber)
      If R.Information(wdActiveEndAdjustedPageNumber) > 1 Then
        Do
          R.MoveStart wdWord, -1
        Loop Until R.Information(wdFirstCharacterLineNumber) <> GetLineNumberAbs
        GetLineNumberAbs = R.Parent.Range(1, R.Start).ComputeStatistics(Statistic:=wdStatisticLines) + 1
      End If
    End Function

    • Als Antwort markiert dherrmann Donnerstag, 28. April 2016 16:33
    Donnerstag, 28. April 2016 15:13

Alle Antworten

  • Hallo,

    schau mal hier ! Vielleicht hilft es weiter.

    Viel Erfolg

    Donnerstag, 28. April 2016 06:26
  • Danke für den Tipp!

    Die dritte Funktion funktioniert prinzipiell. Wenn man ScreenUpdating abschaltet noch ein wenig besser, insbesondere dann, wenn der Text sehr lang ist. In dem Fall dauert es wegen des 'Movings' einige Zeit, wenn der Cursor sich weit hinten im Text befindet.
    Wäre gut, wenn man das irgendwie schneller lösen könnte...

    Grüße-


    Dietrich

    Donnerstag, 28. April 2016 08:14
  • Hallo Dietrich,

    ich habe noch das hier gefunden. Mit

    Selection.Range.ComputeStatistics(Statistic:=wdStatisticLines)

    bekomme ich die gleiche Zeilennummer wie in vorhergehenden Beispiel: GetAbsoluteLineNum.

    Viel Erfolg

    Donnerstag, 28. April 2016 11:46
  • Selection.Range.ComputeStatistics(Statistic:=wdStatisticLines)

    bekomme ich die gleiche Zeilennummer wie in vorhergehenden Beispiel: GetAbsoluteLineNum.

    Naja, aber doch nur wenn Du vom Anfang des Dokumentes alles bis zur Position markierst...?

    Außerdem "spinnt" das ein bißchen direkt am Zeilenanfang...

    Aber die Idee ist gut, ich hätte da eine Alternative.

    Andreas.

    Function GetLineNumberAbs(Optional ByVal R As Range) As Long
      'Returns the line number absolute in the document
      If R Is Nothing Then Set R = Selection.Range
      GetLineNumberAbs = R.Information(wdFirstCharacterLineNumber)
      If R.Information(wdActiveEndAdjustedPageNumber) > 1 Then
        Do
          R.MoveStart wdWord, -1
        Loop Until R.Information(wdFirstCharacterLineNumber) <> GetLineNumberAbs
        GetLineNumberAbs = R.Parent.Range(1, R.Start).ComputeStatistics(Statistic:=wdStatisticLines) + 1
      End If
    End Function

    • Als Antwort markiert dherrmann Donnerstag, 28. April 2016 16:33
    Donnerstag, 28. April 2016 15:13
  • Hallo Andreas,

    das ist genau DIE Lösung der Frage!! Vielen Dank für den Code, der veröffentlichungswürdig ist, denn ich habe in vielen Recherchen im Internet nichts zu dieser Frage gefunden.

    Also nochmals danke und viele Grüße-


    Dietrich

    Donnerstag, 28. April 2016 16:36