Supportnet / Forum / Tabellenkalkulation
XP; Excel2002; Zeilenumbruch in VBA
Frage
In eine Zelle soll ein Text eingeschrieben werden, der an einer beliebigen, von mir bestimmten Stelle auf die nächste Zeile innerhalb der Zelle umgebrochen werden soll. Manuell ist das einfach: Im Menü Format "Zellen" "Ausrichtung" den Zeilenumbruch aktivieren. Bei der Eingabe an der gewünschten Stelle Alt + Enter verwenden.
Bei einem modifizierten Makro, das ich verwende, erfolgt die Texteingabe in die jeweilige Zelle über eine Inputbox, z.B.
:
ActiveCell.Offset(0, 2).Value = Inputbox("Eingabefeld", "Register-Inhalte")
:
Alt + Enter ist aber innerhalb des Inputfensters wirkungslos. Weiß jemand Rat, wie man hier vorgehen muss? Queelun
Antwort 1 von Guenter
Hallo,
wie man einen Zeileumbruch in der Inputbox eingeben kann, weis ich auch nicht.
Aber ich hätte einen Vorschlag, das Problem zu umgehen: Du gibst in der Inputbox in den Text ein Zeichen (oder Zeichenkette) ein, was sonst nicht vorkommt. Das Zeichen kannst Du ja auch angeben, z.B. "Eingabefeld (xy für Zeilenumbruch), ..."
Dann soll das Makro dieses Zeichen ersetzen durch Chr(13) und dann erfolgt die Ausgabe.
Gruß
Günter
wie man einen Zeileumbruch in der Inputbox eingeben kann, weis ich auch nicht.
Aber ich hätte einen Vorschlag, das Problem zu umgehen: Du gibst in der Inputbox in den Text ein Zeichen (oder Zeichenkette) ein, was sonst nicht vorkommt. Das Zeichen kannst Du ja auch angeben, z.B. "Eingabefeld (xy für Zeilenumbruch), ..."
Dann soll das Makro dieses Zeichen ersetzen durch Chr(13) und dann erfolgt die Ausgabe.
Gruß
Günter
Antwort 2 von Queelun
Hallo Günther,
deine Idee habe ich mal ausprobiert:
Selection Replacement (What:= "xy", Replacement:= "& vbCrLf &" ........)
Das Argument Replacement nimmt nur eine Zeichenkette an. Demzufolge erschien in der Zelle der eingegebene Text einschließlich vbCrLf als Zeichenkette.
Wie kann man nun die Zeichenkette vbCrLf in den gleichnamigen Steuerbefehl (für Zeilenschaltung und Wagenrücklauf) umwandeln. Hast Du da einen Tip? Queelun
deine Idee habe ich mal ausprobiert:
Selection Replacement (What:= "xy", Replacement:= "& vbCrLf &" ........)
Das Argument Replacement nimmt nur eine Zeichenkette an. Demzufolge erschien in der Zelle der eingegebene Text einschließlich vbCrLf als Zeichenkette.
Wie kann man nun die Zeichenkette vbCrLf in den gleichnamigen Steuerbefehl (für Zeilenschaltung und Wagenrücklauf) umwandeln. Hast Du da einen Tip? Queelun
Antwort 3 von Guenter
Hi Queelun,
ich nehme an, Du musst Deine String-Variable (z.B. Eingabe) zerlegen mit der mid-Anweisung.
Etwa so:
for n = 1 to len(Eingabe)
if mid(Eingabe, n, 2) = "xy" then
Eingabe1 = left$(Eingabe, n-1)
Eingabe2 = right$(Eingabe, len(Eingabe)-n+2)
end if
next
Eingabe_neu = Eingabe1 & vbCrLf & Eingabe2
Achtung: ich habe das Makro nicht getestet, aber ich gehe davon aus, dass Du weist, was ich meine.
Gruß
Günter
ich nehme an, Du musst Deine String-Variable (z.B. Eingabe) zerlegen mit der mid-Anweisung.
Etwa so:
for n = 1 to len(Eingabe)
if mid(Eingabe, n, 2) = "xy" then
Eingabe1 = left$(Eingabe, n-1)
Eingabe2 = right$(Eingabe, len(Eingabe)-n+2)
end if
next
Eingabe_neu = Eingabe1 & vbCrLf & Eingabe2
Achtung: ich habe das Makro nicht getestet, aber ich gehe davon aus, dass Du weist, was ich meine.
Gruß
Günter
Antwort 4 von Queelun
Hallo Günter,
Deine Programmzeilen habe ich getestet. Weder Syntax- noch Runtime Error. Allerdings betrachtet das Programm die Zeichenfolge vbCrLf zwischen den beiden Textteilen nach wie vor als Text und schreibt das Ganze unverändert in die vorgeseheneZelle, also Eingabe1xyEingabe2.
Ich dachte mir nun, xy als Konstante zu definieren - da vbCrLf ja eine Konstante ist - und sie hinter die If-Anweisung zu positionieren. (Ich zitiere Deine übrigen Programmzeilen):
For n = 1 To Len(Eingabe)
If Mid(Eingabe,n, 2) = "xy" Then
xy.value = vbCrLf
Eingabe1 = Left$(Eingabe, n-1)
Eingabe2 = Right$(Eingabe,Len(Eingabe)-n+2)
End If
Next
Eingabe_neu = Eingabe1 & xy & Eingabe2
Geht auch nicht. Fehlermeldung: "Dieser Typ der Automatisierung wird von Visual Basic nicht unterstützt".
Ich glaube fast, dass es nicht möglich ist, Text mit Zeilenumbruch in eine Inputbox einzugeben. Oder kann mich jemand eines besseren belehren? Gruß Queelun
Deine Programmzeilen habe ich getestet. Weder Syntax- noch Runtime Error. Allerdings betrachtet das Programm die Zeichenfolge vbCrLf zwischen den beiden Textteilen nach wie vor als Text und schreibt das Ganze unverändert in die vorgeseheneZelle, also Eingabe1xyEingabe2.
Ich dachte mir nun, xy als Konstante zu definieren - da vbCrLf ja eine Konstante ist - und sie hinter die If-Anweisung zu positionieren. (Ich zitiere Deine übrigen Programmzeilen):
For n = 1 To Len(Eingabe)
If Mid(Eingabe,n, 2) = "xy" Then
xy.value = vbCrLf
Eingabe1 = Left$(Eingabe, n-1)
Eingabe2 = Right$(Eingabe,Len(Eingabe)-n+2)
End If
Next
Eingabe_neu = Eingabe1 & xy & Eingabe2
Geht auch nicht. Fehlermeldung: "Dieser Typ der Automatisierung wird von Visual Basic nicht unterstützt".
Ich glaube fast, dass es nicht möglich ist, Text mit Zeilenumbruch in eine Inputbox einzugeben. Oder kann mich jemand eines besseren belehren? Gruß Queelun
Antwort 5 von nighty
hi alle
a$="einszwei"
range("a1") = mid$(a$,1,4) & chr(10) & mid$(a$,5,len(a$))
gruss nighty
a$="einszwei"
range("a1") = mid$(a$,1,4) & chr(10) & mid$(a$,5,len(a$))
gruss nighty
Antwort 6 von nighty
hi alle
kurzes beispiel auf eine inputbox bezogen,
bei der eingabe sind zwei aufeinanderfolgende leerzeichen der zeilenvorschub,aber in diesem beispiel nur einmal anzuwenden.
gruss nighty
Sub Makro1()
wert01$ = InputBox("text eingeben", "zwei leerzeichen sind ein zeilenvorschub")
For t = 1 To Len(wert01)
If Mid$(wert01, t, 1) = " " And Mid$(wert01, t + 1, 1) = " " Then
Range("a1") = Range("a1") & Mid$(wert01, t, 1) & Chr$(10) & Mid$(wert01, t + 2, Len(wert01))
t = Len(wert01)
Else
Range("a1") = Range("a1") & Mid$(wert01, t, 1)
End If
Next t
End Sub
kurzes beispiel auf eine inputbox bezogen,
bei der eingabe sind zwei aufeinanderfolgende leerzeichen der zeilenvorschub,aber in diesem beispiel nur einmal anzuwenden.
gruss nighty
Sub Makro1()
wert01$ = InputBox("text eingeben", "zwei leerzeichen sind ein zeilenvorschub")
For t = 1 To Len(wert01)
If Mid$(wert01, t, 1) = " " And Mid$(wert01, t + 1, 1) = " " Then
Range("a1") = Range("a1") & Mid$(wert01, t, 1) & Chr$(10) & Mid$(wert01, t + 2, Len(wert01))
t = Len(wert01)
Else
Range("a1") = Range("a1") & Mid$(wert01, t, 1)
End If
Next t
End Sub
Antwort 7 von nighty
hi alle
oder so
bei einer beliebig langen texteingabe wird nach jeweils drei zeichen ein zeilenvorschub vorgenommen,bei 9 zeichen also drei zeilen.
gruss nighty
Sub Makro1()
wert01$ = InputBox("text eingeben", "")
For t = 1 To Len(wert01)
If gt% = 3 Then
Range("a1") = Range("a1") & Chr$(10)
gt% = 0
End If
gt% = gt% + 1
Range("a1") = Range("a1") & Mid$(wert01, t, 1)
Next t
End Sub
oder so
bei einer beliebig langen texteingabe wird nach jeweils drei zeichen ein zeilenvorschub vorgenommen,bei 9 zeichen also drei zeilen.
gruss nighty
Sub Makro1()
wert01$ = InputBox("text eingeben", "")
For t = 1 To Len(wert01)
If gt% = 3 Then
Range("a1") = Range("a1") & Chr$(10)
gt% = 0
End If
gt% = gt% + 1
Range("a1") = Range("a1") & Mid$(wert01, t, 1)
Next t
End Sub
Antwort 8 von Queelun
Hallo nighty,
Deinen Vorschlag für einmaligen Zeilenvorschub habe ich in mein Programm einbauen können. Da ich aber nicht von einem expliziten Range-Objekt, z.B. Range("A1") ausgehen konnte, sondern vom Resultat einer Offsetoperation, habe ich noch eine Weile knobeln müssen, ehe ich hierfür eine Lösung fand:
ActiveCell.Offset(0, 10).Select 'als Beispiel
ActiveCell.FformulaR1C1 = ActiveCell.Value
:
:
ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1 & Mid&(wert01, t, 1)
Besten Dank für eure Beiträge. Angenehme Feiertage wünscht Euch Queelun.
Deinen Vorschlag für einmaligen Zeilenvorschub habe ich in mein Programm einbauen können. Da ich aber nicht von einem expliziten Range-Objekt, z.B. Range("A1") ausgehen konnte, sondern vom Resultat einer Offsetoperation, habe ich noch eine Weile knobeln müssen, ehe ich hierfür eine Lösung fand:
ActiveCell.Offset(0, 10).Select 'als Beispiel
ActiveCell.FformulaR1C1 = ActiveCell.Value
:
:
ActiveCell.FormulaR1C1 = ActiveCell.FormulaR1C1 & Mid&(wert01, t, 1)
Besten Dank für eure Beiträge. Angenehme Feiertage wünscht Euch Queelun.

