Zeilennummern zum Kopieren

16/05/2010 - 21:16 von Kristian | Report spam
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?


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
 

Lesen sie die antworten

#1 Thomas Gahler
18/05/2010 - 22:33 | Warnen spam
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)

Ähnliche fragen