Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeilennummern zum Kopieren

276 views
Skip to first unread message

Kristian

unread,
May 16, 2010, 3:16:01 PM5/16/10
to
Hallo Leute,

ich hoffe, ich bin hier richtig...
Ich habe ein Transcript eines Interviews und möchte eigentlich was ganz
einfaches:
beim Kopieren des Textes sollen die Zeilennummern mit kopiert werden.
Das klappt leider nicht mit den Word-eigenen Zeilennummern (fall doch
irgendwie, wäre das wahrscheinlich die einfachere Möglichkeit).

Deshalb habe ich mir überlegt, dass ich ja am Anfang jeder Zeile die
entsprechende Zeilennummer mit einem Tab dahinter und einem Absatz davor per
Makro einfügen könnte. Dann kann ich die Zeilennummern zusammen mit dem Text
kopieren und es gibt keine Probleme.

Leider bin ich kein so großes Word-VBA-Genie. Mein Code ist sehr umständlich
und die Verarbeitung dauert superlange. Außerdem "vergisst" Word vor einigen
Zeilen seltsamerweise die Nummern... Außerdem wird die Schleife nicht wie
geplant verlassen... aber das krieg ich zur not auch noch selbst hin...

Hat jemand ne bessere Idee?

--snipp--

Sub Zeilennummern_einfügen()
Dim Z As Integer, i As Integer, leer As Boolean
Z = 1
i = 1
leer = False

On Error GoTo ende
Selection.HomeKey unit:=wdLine

Do
If Not Selection.Paragraphs(1).Range.Words.Count = 1 Then
Selection.HomeKey unit:=wdLine
If Not Selection.Range.End = 0 Then
If leer Then
leer = False
Else
Selection.TypeParagraph
End If
End If
Else
leer = True
End If

Selection.Font.Bold = False
Selection.Font.Size = 10
Selection.TypeText Text:=i & vbTab
Selection.MoveDown unit:=wdLine, Count:=1
i = i + 1
Loop Until Selection.Range.End > ActiveDocument.Range.End - 1

ende:
End Sub


Thomas Gahler

unread,
May 18, 2010, 4:33:59 PM5/18/10
to
Hallo Kristian


> ich hoffe, ich bin hier richtig...

Genau richtig

> Das klappt leider nicht mit den Word-eigenen Zeilennummern (fall doch
> irgendwie, wäre das wahrscheinlich die einfachere Möglichkeit).

Ich habe auf die Schnelle nichts gefunden...

> Deshalb habe ich mir überlegt, dass ich ja am Anfang jeder Zeile die
> entsprechende Zeilennummer mit einem Tab dahinter und einem Absatz davor
> per
> Makro einfügen könnte. Dann kann ich die Zeilennummern zusammen mit dem
> Text
> kopieren und es gibt keine Probleme.

Das ist eine Möglichkeit


> Leider bin ich kein so großes Word-VBA-Genie. Mein Code ist sehr
> umständlich
> und die Verarbeitung dauert superlange.

Solche Verarbeitungen können immer lange dauern. Wobei 'lange' sehr relativ
ist.


> Außerdem "vergisst" Word vor einigen Zeilen seltsamerweise die Nummern...

Ist dass jeweils bei den Absätzen der Fall? Wäre doch sinnvoll, wenn die
Absätze weiterhin sichtbar bleiben.


> Außerdem wird die Schleife nicht wie
> geplant verlassen... aber das krieg ich zur not auch noch selbst hin...

Ich muss zugeben, als ich jetzt das Beispiel aufgesetzt habe, hatte ich
vergessen dass du Code gepostet hast. Also keine Ergänzungen zu deinem Code,
sondern ein eingenes Beispiel. Wobei sich die beiden Lösungsansätze gar
nicht so stark unterscheiden.


> Hat jemand ne bessere Idee?

Ganz schnell wäre als .txt-Datei (nur Text) speichern und 'Zeilenumbrüche
einfügen' aktivieren. Diese Datei in VBA (nicht Word) öffnen und Zeilenweise
einlesen, mit der Zeilennummer und Tab versehen und wieder speichern. Doch
dann gehen die alle Formatierungen verloren.


Sub Demo()
Dim i As Long
Dim rngDoc As Word.Range
Dim rngLine As Word.Range

'Silbentrennung abschalten
ActiveDocument.AutoHyphenation = False

'Start-Position anspringen
With Selection
.HomeKey Unit:=wdStory

'Alle Zeilen bearbeiten
Do


i = i + 1

.TypeParagraph
.TypeText Text:=CStr(i) & vbTab

Set rngDoc = ActiveDocument.Range
Set rngLine = ActiveDocument.Bookmarks("\Line").Range

.MoveDown Unit:=wdLine, Count:=1
.HomeKey Unit:=wdLine
Loop While Not (rngDoc.End = rngLine.End + 1)

'Zum Anfang springen
.HomeKey Unit:=wdStory
'Beim ersten Durchgang eingefügter Absatz löschen
ActiveDocument.Paragraphs(1).Range.Delete

'Leere Absätze entfernen
' With .Find
' .ClearFormatting
' .Replacement.ClearFormatting
' .Text = "^p^p"
' .Replacement.Text = "^p"
' .Forward = True
' .Wrap = wdFindContinue
' .Format = False
' .MatchCase = False
' .MatchWholeWord = False
' .MatchWildcards = False
' .MatchSoundsLike = False
' .MatchAllWordForms = False
' .Execute Replace:=wdReplaceAll
' End With
End With
End Sub

Wenn du die leeren Absätze draussen haben möchtest, dann musst du zusätzlich
die auskommetierten Zeilen aktivieren.


--
Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP2)


0 new messages