Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
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?
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.
Anzeige
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.
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
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

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige