PDA

Vollständige Version anzeigen : Makro für Zeilenformatierung


fringo
04.10.2019, 17:05
Hallo Forum,

Ich transkribiere Interviews und versuche nun ein Makro in Word zu erstellen, das mir die Arbeit sehr erleichtern könnte, das Interview liegt nach folgendem Muster vor:

Text von Max?
Text von Moritz.

...rauskommen soll:

Max: "Text von Max?"
Moritz: "Text von Moritz."

D.h. ich möchte eigentlich nach jedem Sprecherwechsel (=Zeilenumbruch) das Gesagte mit z.b. Max, gefolgt von Doppelpunkt und Anführungszeichen (am Anfang und Ende) per Makro formatieren.

Ich hoffe ich konnte das einigermaßen verständlich erklären. :rolleyes:

Bitte um Anregungen, da ich kaum Erfahrung mit Makros habe

Danke!

Lisa

Gerhard H
04.10.2019, 23:49
Hallo Lisa,

da müssen schon einige Voraussetzungen gegeben sein, damit man das mit einem einfachen Makro hinkriegt. Im Idealfall sollte es so aussehen,


dass die Sprecherwechsel durch Absatzumbruch (Enter) und nicht durch Zeilenumbruch (Shift-Enter) gekennzeichnet sind,

dass mehrzeilige Absätze pro Sprecher entweder automatisch umgebrochen werden oder durch manuellen Zeilenumbruch,

dass zwischen zwei Sprecherpassagen keine leeren Absätze sind,

dass es nur zwei Sprecher gibt, die sich einander regelmäßig abwechseln.

Da ich das aber kaum zu hoffen wage, ich also befürchte, dass dir das folgende Makro nicht sehr weiterhilft, solltest du bei Bedarf ein Musterdokument mit einer längere Passage hochladen. Den Text kannst du verfremden, aber die Struktur mit allen ihren (Un-)Regelmäßigkeiten sollte erkennbar sein.

Der Idealfall ginge so:
Sub Max()
Dim i As Long
Dim alterAbsatz As String, neuerAbsatz As String

With ActiveDocument

'für Max:
For i = 1 To .Paragraphs.Count Step 2
alterAbsatz = Left(.Paragraphs(i).Range.Text, Len(.Paragraphs(i).Range.Text) - 1)
neuerAbsatz = "Max: " & Chr(34) & alterAbsatz & Chr(34) & Chr(13)
.Paragraphs(i).Range.Text = neuerAbsatz
'nur zur besseren Sichtbarkeit:
.Paragraphs(i).Range.Font.ColorIndex = wdRed
Next i

'für Moritz:
For i = 2 To .Paragraphs.Count Step 2
alterAbsatz = Left(.Paragraphs(i).Range.Text, Len(.Paragraphs(i).Range.Text) - 1)
neuerAbsatz = "Moritz: " & Chr(34) & alterAbsatz & Chr(34) & Chr(13)
.Paragraphs(i).Range.Text = neuerAbsatz
'nur zur besseren Sichtbarkeit:
.Paragraphs(i).Range.Font.ColorIndex = wdBlue
Next i
End With
End Sub

Ein ideales Dokument mit diesem Makro drin im Anhang.

halweg
05.10.2019, 09:37
Einfacher wäre doch, eine Gliederung zu erstellen, d. h. zwei Formatvorlagen, wo "Max: " und "Moritz: " jeweils Teil der Vorlage sind (über "neues Zahlenformat definieren") . Dann könnte man noch einstellen, dass jeweils die andere Vorlage als nächstes folgen soll, also "Max" auf "Moritz" und umgekehrt (über "Formatvorlage ändern").

Zur Bearbeitung vorhandener Texte müsste man dann nach dem ersten "Max" - Absatz Enter tippen (es entsteht ein leerer "Moritz"-Absatz) und dann Entf, damit der nachfolgende Absatz (noch ohne Sprecherkennzeichnung) in den Moritz-Absatz aufgenommen wird.

fringo
05.10.2019, 09:57
Wow, das sind schon einmal coole Ansätze, danke für die Mühe! ;)

Was Deine beschriebenen Voraussetzungen betrifft, so sind die tatsächlich alle gegeben. Das was hier noch nicht funktioniert, ist, dass ich gerne nur einen markierten Bereich formatiert hätte und nicht das ganze Dokument.

Ein super Bonus :holy: wäre noch, dass man für die Sprecher Variablen einsetzt, die man ev. über ein Feld abfragen könnte oder so, geht das?

Danke nochmals vorerst!

Lisa

Gerhard H
05.10.2019, 21:03
Hallo Lisa,

hier eine erweiterte Version. Code ist im angehängten Dokument enthalten.
Sub Max2()
Dim i As Long
Dim alterAbsatz As String, neuerAbsatz As String
Dim arbeitsBereich As Bookmark
Dim partner1 As String, partner2 As String

'Überprüfen, ob was markiert ist
If Len(Selection.Range) = 0 Then
MsgBox "Markier erst mal was!"
Exit Sub
End If

'Gesprächspartner abfragen
partner1 = InputBox("Bitte Gesprächspartner 1 eingeben", , "Interviewer") & ": "
partner2 = InputBox("Und jetzt den Gesprächspartner 2", , "Befragter") & ": "

'Textmarke um den markierten Bereich anlegen
Set arbeitsBereich = ActiveDocument.Bookmarks.Add(Name:="Bereich", Range:=Selection.Range)

With arbeitsBereich.Range

'für Gesprächspartner 1:
For i = 1 To .Paragraphs.Count Step 2
alterAbsatz = Left(.Paragraphs(i).Range.Text, Len(.Paragraphs(i).Range.Text) - 1)
neuerAbsatz = partner1 & Chr(34) & alterAbsatz & Chr(34) & Chr(13)
'Text färben (optional)
.Paragraphs(i).Range.Font.ColorIndex = wdRed
'Text ändern
.Paragraphs(i).Range.Text = neuerAbsatz
Next i

'für Gesprächspartner2:
For i = 2 To .Paragraphs.Count Step 2
alterAbsatz = Left(.Paragraphs(i).Range.Text, Len(.Paragraphs(i).Range.Text) - 1)
neuerAbsatz = partner2 & Chr(34) & alterAbsatz & Chr(34) & Chr(13)
'Text färben (optional)
.Paragraphs(i).Range.Font.ColorIndex = wdBlue
'Text ändern
.Paragraphs(i).Range.Text = neuerAbsatz
Next i
End With

'Textmarke wieder löschen
ActiveDocument.Bookmarks("bereich").Delete
End Sub

fringo
07.10.2019, 12:18
Hallo Gerhard,

Funktioniert super, habs noch ein bisschen angepasst.. :)

DANKE

lg