Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Korrekte Zeilenumbrüche mit VBA

Korrekte Zeilenumbrüche mit VBA
03.01.2023 12:42:36
Ingo
Hallo
Wenn man am PC mit der Tastatur einen Text tippt, kann man ja auf 2 verschiedene Arten einen Zeilenumbruch machen:
* EINGABETASTE
* UMSCHALT+EINGABETASTE
Wenn ich jetzt mit VBA in eine txt-Datei schreibe, verwende ich bisher vbCrLf. Das ist dann aber der Zeilenumbruch "EINGABETASTE".
Wie kann ich denn den Zeilenumbruch "UMSCHALT+EINGABETASTE" verwenden?
Gruß
Ingo
Anzeige

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
vbLf. owT
03.01.2023 12:44:30
Rudi
AW: vbLf. owT
03.01.2023 12:50:38
Ingo
Hallo
Ich glaube vbLf ist nicht korrekt. Da wird auch wieder "EINGABETASTE" verwendet und nicht "UMSCHALT+EINGABETASTE".
Gruß
Ingo
AW: Korrekte Zeilenumbrüche mit VBA
03.01.2023 12:48:35
Daniel
HI
wenn du ALT+ENTER meinst für einen Zeilenumbruch innerhalb der Zelle, dann ist das vbLF.
wenn du damit erreichen willst, dass beim Wiedereinlesen der Textdatei an dieser Stelle keine neue Gesamtzeile entsteht, müsstest du wahrscheinlich beim Speichern und einlesen mit Texterkennungzeichen arbeiten.
Gruß Daniel
Anzeige
AW: Korrekte Zeilenumbrüche mit VBA
03.01.2023 13:00:23
Ingo
Hallo Daniel
Ich glaube, wir haben uns missverstanden. Ich versuche es anders zu beschreiben.
Wenn man z.B. in einem Word-Dokument die Enter-Taste drückt, entsteht ja ein neuer Absatz.
Wenn man aber Enter+Umschalt drück, entsteht ein Zeilenumbruch innerhalb des Absatzes.
In einer Word Datei kann man das dann auch erkennen am Abstand zur nächsten Zeile.
Wenn man das in Notepad macht, sehen beide Fälle gleich aus, obwohl sie es ja nicht sind.
Ich möchte also nun mit VBA einen Zeilenumbruch (Enter+Umschalt) in eine Text-Datei schreiben.
vbLF macht aber eben doch wieder einen neuen Absatz.
Gruß
Ingo
Anzeige
AW: Korrekte Zeilenumbrüche mit VBA
03.01.2023 13:11:17
Rudi
Hallo,
das ist ein Feature von Word.
Notepad oder einem anderen reinen Texteditor ist Wurscht ob ein chr(10) oder chr(13) am Ende steht.
Gruß
Rudi
Wie geht das denn?
03.01.2023 13:14:28
Ingo
Hallo Rudi
Ja das hatte ich auch so gemeint. Aber mir ist es eben nicht wurscht. Ich möchte mit VBA einen "richtigen" Zeilenumbruch in eine Text-Datei schreiben. Kannst Du mir denn sagen, ob bzw. wie das geht?
Gruß
Ingo
Anzeige
AW: Wie geht das denn?
05.01.2023 01:57:07
Yal
Hallo Ingo,
in Excel kannst Du innerhalb eine Zelle nur einen "Alt+Enter" platzieren.
Mache den Versuch: in Zelle A1 eintippen:
a, Alt+Enter, b
Dann per Code analysieren:

Sub test()
Dim i, T
T = Range("A1").Value
For i = 1 To Len(T)
Debug.Print i & ": ";
'        Debug.Print Mid(T, i, 1); 'Vers.1: nicht auskommentiert, Vers.2: auskommentiert
Debug.Print Asc(Mid(T, i, 1)),
Debug.Print Asc(Mid(T, i, 1)) = 13
Next
Debug.Print "vbLF", Asc(vbLf)
Debug.Print "vbcr", Asc(vbCr)
End Sub
in Version "nicht auskommentiert" wird zwischen "2: " und " 10 Falsch" ein Carriage Return (Cr), den es nicht gibt, wenn man diese Zeile auskommentiert:
Diese Sprung deutet darauf, dass ein vbCr vorliegt. Diese scheint aber nicht zu erfassen zu sein. Ich denke, Excel kann den UTF-8 nicht richtig erfassen.
Auch mit RegExp wird den Cr nicht gefunden:

Sub RegExp_test()
Dim R As Object
Dim T As String
Set R = CreateObject("VBScript.RegExp")
T = Range("A1").Value
R.Pattern = "\r" 'Carriage Return, vbCr
Debug.Print R.Pattern, R.test(T)
R.Pattern = "\n" 'Line Feed, vbLf
Debug.Print R.Pattern, R.test(T)
End Sub
VG
Yal
Anzeige
AW: Korrekte Zeilenumbrüche mit VBA
03.01.2023 13:20:16
onur
STRG ENTER ergibt bei Word einen Seitenumbruch, den weder Excel noch Notepad kennt. Geht ja auch nicht, da Excel kein Textverarbeitungsprogramm ist, sondern ein Tabellenkalkulationsprogramm.
Ich meinte NICHT STRG ENTER
03.01.2023 13:24:52
Ingo
Ich meinte NICHT STRG ENTER.
Ich meinte dass man die Enter-Taste gleichzeitig mit der Umschalt-Taste drückt.
Die Umschalt-Taste ist die mit dem Pfeil nach oben, mit der man auch die Großbuchstaben macht.
Wie kann ich in VBA einen Zeilenumbruch erzeugen, der entsteht, wenn ich die Enter-Taste und die Umschalt-Taste gleichzeitig drücke?
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 13:45:58
onur
CR LF (Asci 13 und 10) ist vbCrLf (Carriage Return + LineFeed), DAS, was du benutzt.
Was du aber willst, ist VbLf.
AW: Ich meinte NICHT STRG ENTER
03.01.2023 13:55:50
onur
Und der korrekte Ausdruck ist "weicher Zeilenumbruch" - wie ich gelesen habe,
AW: Ich meinte NICHT STRG ENTER
03.01.2023 13:55:59
Ingo
Nein. VbLf ist nicht, das was ich will.
VbLf ist doch Chr(10).
Ich glaube, dass ich es jetzt herausgefunden habe.
Es müsste vbVerticalTab Chr(11) sein.
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 14:10:43
onur
Da ist viel Halb- bzw Pseudowissen in dir.
Teste doch mal das und füge die drei Texte in eine Word-Datei ein:
https://www.herber.de/bbs/user/157067.xlsm
AW: Ich meinte NICHT STRG ENTER
03.01.2023 14:42:19
Ingo
Ja das mit dem diesbezüglichen Halb- bzw Pseudowissen in mir kann wirklich gut sein.
Ich habe jetzt die 3 Texte von Dir mal in eine Word-Datei eingefügt (mit eingeblendeten Absatz-Zeichen und so). Hier mal ein Screenshot davon:
Userbild
Demnach sind die ersten beiden Texte ja genau das was ich will.
Nun verwende ich das folgende VBA-Script, um den ersten Text unter Verwendung von vbLf in die Zwischenablage zu schreiben.

Sub Zwischenablge_TEST()
Dim Zwischenablage As DataObject
Dim sTxt As String
Dim irow As Long
Set Zwischenablage = New DataObject
irow = ActiveCell.Row
Zwischenablage.SetText "Hallo" & vbLf & "Welt"
Zwischenablage.PutInClipboard
End Sub
Und den Inhalt der Zwischenablage für ich dann wieder in eine Word-Datei ein. Dabei kommt dann aber das hier raus (siehe Screenshot).
Userbild
Und das ist doch jetzt wieder kein Zeilenumbruch, sondern ein neuer Absatz.
Oder?
Wie kann das denn sein?
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 14:59:37
Daniel
Hi
dann musst du so vorgehen.
1. kopiere dir den Text aus Word in die Zwischenablage
2. lese dir jetzt in deinem Makro den Text aus der Zwischenablage in eine Variable ein (also die Umkeroperation zu SetText / PutInClipboard, das solltest du eigentlich dort finden, wo du auch das gefunden hast)
3. analysiere jetzt die ASCII-Codes des Textes, dann solltest du sehen, was Word hier verwendet.
hier mal der Code als Gedankenanstoß ( nicht getestet, nur funktionsprinzip)

Zwischenablage.GetFromClipboard
txt = Zwischenablage.GetText(1)
for i = 1 to len(txt)
Ergebnis = Ergebnis & ASC(Mid(txt, i, 1)) & " "
next
Msgbox Ergebnis 
die Messagebox zeigt dir die ASCII-Codes, die der Text aus der Zwischenablage hat.
alles was größer gleich 32 ist, ist anzuzeigender Text (32 = " "), was kleiner ist sind Steuerzeichen.
vbLf hat den Code 10
vbCr hat den Code 13
vbCrLf ist die Kombination aus 13 und 10
da der Text so direkt aus der Zwischenablage von Word kommt, müsstest du sehen was Word verwendet und was du dann ebenfalls verwenden musst wenn du den Text für Word generierst.
Gruß Daniel
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 15:31:10
volti
Hallo zusammen,
hier auch malein paar Gedanken von mir zum spannenden Thema.
Beide Zeichen, die Word hier darstellt erzeugen in der Zwischenablage ein vbCRLF also die zwei ASCII-Zeichen 10 und 13.
Es besteht m.E. hier demnach keine Chance, das ganze außerhalb von Word nachzubauen. Die angezeigten Symbole wie z.B. das ¶ sind druckbare Platzhalter, in diesem Fall das Zeichen 182 aus der ASCII-Tabelle, können also auch nicht verwendet werden.
Schaut man sich die Worddatei (bei mir z.B..docx) im HEX-Editor an, so sieht man nicht den erwarteten Text sondern komprimierten Datensalat, aus dem die Zeichen auch nicht entnommen werden könnten.
Ich denke, Word handelt das intern so für sich.....
Gruß
Karl-Heinz
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 15:35:56
onur
Das Problem ist ja, dass man das über Strg+C aus der Excel-Datei kopieren und korrekt in Word einfügen kann. Aber nicht mit VBA und den Standard-Clipboardbefehlen. Da geht was verloren.
AW: Ich meinte NICHT STRG ENTER
03.01.2023 15:48:28
volti
Hallo,
vielleicht noch ein Gedanke zur Zwischenablage.
Wenn ich etwas manuell z.B. mit Strg-C aus Excel oder aus Word in die Zwischenablage kopiere, so wird dort nicht nur eine Kopie abgelegt, sondern es werden mehrere Versionen mit verschiedenen Formaten dort platziert.
Wenn du z.B. über die entsprechenden API-Funktionen (EnumClipboardFormats) die nach so einer Kopie die in der Zwischenablage enthaltenen Formate ansiehst, stellst Du fest, dass da auch einige besondere Formate außerhalb von Text oder Bitmap dabei sind.
Deshalb kann man innerhalb von Word, so denke ich mir, auch alles 1:1 kopieren.
Anwendungen, die das jeweilige Format nicht kennen, nehmen das für sie bekannte Format, im Zweifelsfalle Text oder sie funktionieren nicht.
Gruß
Karl-Heinz
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 15:59:49
onur
Denau, offenbar sind die Standard-Clipboardfunktionen von VBA nur eine Magerversion der wirklichen Clipboardfunktionen.
Deswegen auch der Link von mir mit den Codebeispielen von Nepumuk, die API -Funktionen benutzen.
AW: Ich meinte NICHT STRG ENTER
03.01.2023 16:19:28
volti
Hallo onur,
der von Daniel gezeigte code holt nur die Textversion.....
txt = Zwischenablage.GetText(1)
Die 1 steht für Text. Meine Versuche, mit der angeblichen HTML-Variante GetText(2) HTML zu holen, schlug bei mir bisher immer fehl.
Aber eigentlich ging es ja um eine Dateierstellung für Word mit den Sonderumbrüchen, und das geht m.E. nicht.
Gruß
Karl-Heinz
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 17:01:59
Ingo
Was spricht denn gegen die Verwendung von vbVerticalTab?
Damit wird ja anscheinenden so ein "weicher" bzw. "maueller" Zeilenumbruch erzeugt.
Und das Einfügen in Word geht dann auch.
AW: Ich meinte NICHT STRG ENTER
03.01.2023 17:41:57
volti
Hallo Ingo,
nichts spricht dagegen.
Es funktioniert. Hatte ich bisher nicht gewusst, dass Word das Zeichen verwendet. Hut ab, wieder was gelernt. :-)
Gruß
Karl-Heinz
Anzeige
AW: Ich meinte NICHT STRG ENTER
03.01.2023 15:57:15
volti
Hallo zusammen,
ergänzend nach dem Motto: Geht nicht, gibt's nicht.
Man kann sicherlich per VBA Daten erzeugen, die dem gewünschten Word-Format entsprechen und über die API in die Zwischenablage bringen.
Neben dem Aufwand auch mehr als tricky und unangebracht. Also bleibe ich lieber bei "geht nicht". :-)
Gruß
Karl-Heinz
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Korrekte Zeilenumbrüche mit VBA


Schritt-für-Schritt-Anleitung

Um einen "weichen" Zeilenumbruch in Excel VBA zu erzeugen, der dem Drücken von Umschalt+Eingabetaste entspricht, kannst Du den ASCII-Code für den Zeilenumbruch verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" -> Einfügen -> Modul).

  3. Verwende den folgenden Code, um den Zeilenumbruch in eine Zelle einzufügen:

    Sub ZeilenumbruchEinfügen()
       Dim text As String
       text = "Erste Zeile" & vbVerticalTab & "Zweite Zeile"
       Range("A1").Value = text
    End Sub
  4. Führe das Makro aus und überprüfe, ob der Zeilenumbruch korrekt in Zelle A1 dargestellt wird.


Häufige Fehler und Lösungen

  • Fehler: Bei Verwendung von vbLf wird kein weicher Zeilenumbruch erzeugt.

    • Lösung: Verwende vbVerticalTab (Chr(11)) für den gewünschten weichen Zeilenumbruch.
  • Fehler: Der Text wird beim Einfügen in Word als neuer Absatz dargestellt.

    • Lösung: Stelle sicher, dass Du die richtigen Steuerzeichen verwendest und prüfe die ASCII-Codes des Textes in der Zwischenablage.

Alternative Methoden

Wenn die oben beschriebene Methode nicht funktioniert, kannst Du folgende Alternativen ausprobieren:

  1. Verwendung von vbCrLf: vbCrLf (Carriage Return + Line Feed) erzeugt einen neuen Absatz, eignet sich aber nicht für weiche Zeilenumbrüche.
  2. Direktes Einfügen über die Zwischenablage:
    • Kopiere den Text aus Excel und füge ihn direkt in Word ein. Dies kann helfen, die richtigen Steuerzeichen zu verwenden.

Praktische Beispiele

Hier sind einige Beispiele, wie Du Zeilenumbrüche in Excel VBA effektiv einsetzen kannst:

  • Beispiel 1: Text mit weichem Zeilenumbruch in eine Textdatei schreiben:

    Sub SchreibeInTextdatei()
       Dim fso As Object
       Dim txtFile As Object
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set txtFile = fso.CreateTextFile("C:\Pfad\zu\deiner\datei.txt", True)
       txtFile.WriteLine "Zeile 1" & vbVerticalTab & "Zeile 2"
       txtFile.Close
    End Sub
  • Beispiel 2: ASCII-Codes analysieren:

    Sub ASCIIAnalyse()
       Dim i As Integer
       Dim text As String
       text = "Hallo" & vbVerticalTab & "Welt"
       For i = 1 To Len(text)
           Debug.Print Asc(Mid(text, i, 1))
       Next i
    End Sub

Tipps für Profis

  • Verwende ASCII-Codes: Nutze die ASCII-Codes für präzise Steuerzeichen. Beispielsweise ist Chr(10) für einen Zeilenumbruch (Line Feed) und Chr(13) für einen Wagenrücklauf (Carriage Return).
  • Achte auf die Clipboard-Funktionalität: VBA hat Einschränkungen bei den Clipboard-Funktionen. Um sicherzustellen, dass Du die richtigen Steuerzeichen verwendest, analysiere die ASCII-Codes des eingefügten Textes.
  • Nutze die Debug.Print-Funktion, um die Werte der Steuerzeichen direkt im Immediate-Fenster zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich einen Zeilenumbruch in einer Zelle erzeugen?
Du kannst vbLf verwenden, aber für einen weichen Zeilenumbruch in Excel ist vbVerticalTab die bessere Wahl.

2. Warum funktioniert vbCrLf nicht für weiche Zeilenumbrüche?
vbCrLf erzeugt einen neuen Absatz und ist nicht für weiche Zeilenumbrüche geeignet. Verwende stattdessen vbVerticalTab.

3. Wie kann ich die ASCII-Codes eines Textes überprüfen?
Verwende eine Schleife, um die ASCII-Codes mit Asc für jeden Charakter im Text zu analysieren. Beispiel:

For i = 1 To Len(text)
    Debug.Print Asc(Mid(text, i, 1))
Next i

4. Was ist der Unterschied zwischen vbCr, vbLf und vbCrLf?
vbCr (Chr(13)) ist ein Wagenrücklauf, vbLf (Chr(10)) ein Zeilenumbruch und vbCrLf ist die Kombination von beiden, die einen neuen Absatz erzeugt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige