Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Multiline Textbox

Multiline Textbox
09.07.2008 21:52:14
Bernd
Hallo,
Ich benutze in einem Project eine Excel- Multiline Textbox. Der Inhelt soll dann in ein Tabellenformular eingetragen werden.
Zur Zeit zerlege ich den langen Text in definierte Längen und trage Ihn Zeile für Zeile in die Tabelle ein. Nun habe ich im Internet Hinweise und Teilcode gefunden wie man die Zeilen einzeln aus der Textbox auslesen kann. Ich habe das mal probiert, bin aber nicht klargekommen. Kann mich da jemand mal durchsprechen?
Die Textbox1 steht beispielsweise in der Userform1.
Gruß
Bernd

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Multiline Textbox
09.07.2008 22:06:16
andy027
Hallo Bernd,
Deine Frage zur Textbox kann ich Dir nicht aber auf Anhieb beantworten, aber ich hätte einen Alternativ-vorschlag: Wie wärs wenn Du in der userform eine Listbox (oder auch Listenfeld) statt einer Textbox verwendest. Da kann man relativ einfach per VBA reinschreiben oder auch den kompletten Inhalt z.B. in eine txt-Datei exportieren. Ich verwende eine Listbox in einer userform als Ausgabe-Medium, das dem Nutzer diverse Informationen anzeigt. Wäre das was für Dich? Falls ja, kann ich gerne den entsprechenden Code ins Forum stellen.
Gruß,
Andreas B.

Anzeige
AW: Multiline Textbox
10.07.2008 08:18:00
Bernd
Hallo Andreas,
Eine Listbox wollte ich nicht, den reingeschrieben wird über die Tastatur. Der Inhalt der Textbox soll dann übernommen werden.
Gruß
Bernd

AW: Multiline Textbox
09.07.2008 22:17:00
Daniel
Hi
lade doch mal eine Beispieldatei und den Code, den du nicht verstehst, hoch.
dann kann man leichter was erklären.
Gruß, Daniel

Anzeige
AW: Multiline Textbox
10.07.2008 08:32:00
Bernd
https://www.herber.de/bbs/user/53707.xls
Hallo Daniel,
danke erst einmal für Deine Antwort.
Ich habe den Anfang meiner Bemühungen malhochgeladen.
Eine Userform mit Textbox und einem Eintragbutton, beim dem sich der inhalt der Textbox beispielsweise in die Spalte A Zeile für Zeile schreiben soll. Nun habe ich aus dem VB-Archiv mir den Artikel zum Auslesen der Multiline Textbox angeschaut und versucht die Moduke zu plazieren. Dabei bin ich dann schon auf die Nase gefallen und hatte erst einmal aufgehört.
Ich denke man muss zuerst die Anzahl der benutzen Zeilen ermitteln und dann den Zeileninhalt Zeile für Zeile auslesen und in die Tabelle schreiben. Da stehe ich nun..
Gruß
Bernd

Anzeige
AW: Multiline Textbox
11.07.2008 02:18:00
Daniel
Hallo
probier mal diesen Code für den Eintragebutton:

Private Sub eintragen_Click()
Dim Zelle As Range
Dim txt
Dim TextTeile() As String
Set Zelle = Range("A1")
TextTeile = Split(Replace(TextBox1.Text, Chr(10), ""), Chr(13))
For Each txt In TextTeile
Zelle.Value = txt
Set Zelle = Zelle.Offset(1, 0)
Next
End Sub


allerdings werden nur Zeilenwechesel berücksichtigt, die der Anwender eingegeben hat (Shift + Enter)
Gruß, Daniel

Anzeige
AW: Multiline Textbox
11.07.2008 15:18:00
Bernd
hallo Daniel,
entschuldige die lange Antwortzeiten. Ich bin zur Zeit viel unterwegs.
Den Code probiere ich aus. Das heisst aber man muss an jedem Ende der textboxzeile ein Shift+Enter geben.
Das birgt aber auch die Gefahr von Eingabefehlern. Gibt es nicht auch die Möglichkeit die Textbox so auszulesen, wie Sie nach der Eingabe aussieht. Ich habe da im VB Archiv was gelesen mit Aufruf von API's. Ein Teil des Codes habe ich in die Mudole kopiert. Mein Problem ist auch in der Verknüpfung dieser Module. Zum teil weiss ich nicht ob diese Teile dort überhaupt richtig plaziert sind. Weisst Du um diese Möglichkeit.
Gruß
Bernd

Anzeige
AW: Multiline Textbox
12.07.2008 14:20:00
Daniel
HI
ok, hier ne andere Mögichkeit, die einzelnen Textboxzeilen in Zeilen zu übertragen.

Private Sub CommandButton1_Click()
Dim i As Long
With TextBox1
.SetFocus
For i = 1 To .TextLength
.SelStart = i
.SelLength = 1
Select Case .SelText
Case Chr(13), Chr(10)
Case Else
Cells(.CurLine + 1, 1).Value = Cells(.CurLine + 1, 1).Value & .SelText
End Select
Next
End With
End Sub


Gruß, Daniel

Anzeige
AW: Multiline Textbox
13.07.2008 17:14:00
Bernd
Hallo Daniel,
vielen Dank für Deine Hilfe. Die erste Variante habe ich mal ausprobiert. Funktioniert gut.
Die zweite Variante werde ich natürlich auch testen. Ich melde mich dann noch einmal.
Danke
Gruß aus Halle
Bernd

AW: Multiline Textbox
14.07.2008 08:02:55
Bernd
Hallo Daniel,
ich bin begeistert. Das funtkioniert wirklich gut. Nur das allererste Zeichen der Textbox wird abgeschnitten. Ich werde mal probieren i auf 0 zu setzen.
Gruß
Bernd

Anzeige
AW: Multiline Textbox
14.07.2008 11:15:00
Bernd
Hallo Daniel,
ich habe noch einmal eine Datei hochgeladen. Darin ist Dein Code eingefügt.
Mit dem Beispiel hat es prima geklappt. Mit dem eigentlichen Projekt habe ich noch ein paar Probleme
Im Beispiel genügte es mir, wenn der Text in Spalte 1 zeile 1 begann.
Ich muss aber in Zeile 28 Spalte 2 beginnen. Im vorliegenden Code beginnt er zwar in Spalte 28 aber schreibt 1 Buchtstaben unter den anderen und nicht die ganze Zeile. Was habe ich jetzt wieder falsch gemacht.
Gruß
Bernd
https://www.herber.de/bbs/user/53794.doc

Anzeige
AW: Multiline Textbox
14.07.2008 23:37:00
Daniel
HI
der wichtigste Fehler ist erstmal, daß du ne Worddatei und keine Exceldatei hochgeladen hast.
Wenn ich fehler suchen soll, dann muss ich auch was ausprobieren können, dazu brauche ich dann schon ne funktionsfähige Datei, die dann auch den Fehler enthält.
der 2. Fehler ist, daß du einfach mal pauschal "On Error Resume Next" über den Code drüber schreibst.
sowas setzt man nur ganz geziehlt für einzelne Zeilen ein, aber nie pauschal für den ganzen Code.
denn so wird man nur sehr schwer die Fehlerursache finden, man ärgert sich nur über seltsame und nicht nachvollziebare Ergebnisse.
Gruß, Daniel

Anzeige
AW: Multiline Textbox
15.07.2008 07:53:00
Bernd
https://www.herber.de/bbs/user/53820.xls
Hallo Daniel,
habe also meine Fehler korrigiert und die Testabelle hochgeladen. Eine Variante mit Deinem ersten Code, der wirklich gut funktioniert. Der Text wird das Arbeitsblatt Tabelle eingetragen. Damit man nicht so viel tippen muss, steht im Formular Text, der beim Initialisieren der Textbox eingelesen wird. Unter dem Button eintragen läuft dann die aus deinem Code abgeleitete Variante. Der Text wird dann in dass Arbeitsblatt Testtabelle geschrieben ab Zeile 28 Spalte 2 . Sch.... alle Buchstaben untereinander.
Gruß
Bernd

Anzeige
AW: Multiline Textbox
15.07.2008 22:53:17
Daniel
HI
das ist der entscheidende Teil deines Makros:

tbgrund1.SetFocus
For i = 1 To tbgrund1.TextLength
tbgrund1.SelStart = i
tbgrund1.SelLength = 1
Select Case tbgrund1.SelText
Case Chr(13), Chr(10)
Case Else
Cells(zeile + 5, 2).Value = Cells(zeile + 5, 2).Value & tbgrund1.SelText
End Select
zeile = zeile + 1
Next


wichtig ist die Zeile "zeile = zeile +1" , hier wird der Zeilenzähler erhöht, dh. die neue ausgabezeile festgelgt.
geh mal den Code gedanklich durch und überlege dir, dann wann im Code eine neue Zeile festgelegt wird und dann denkmal darüber nach, wann das eigentlich passieren sollte und wo die Zeile plaziert werden müsste, damit es zum richtigen zeitpunkt passiert.
vielleicht hift es dir auch, den Code im Einzelstepmodus durchzugehen, dazu
- vor Makrostart im entsprechenden makro einen haltepunkt setzten (auf den linken rand des Codebereichs klicken, es erscheint ein brauner punkt. zum entfernen einfach auf den Punkt klicken
- jetzt das Makro starten, beim Haltepunkt stoppt der Ablauf
- jetzt kannst du den Ablauf Zeile für Zeile durchklicken, (mit F8 oder mit der Symbolleiste "Debuggen") und dir dabei die Variablenwerte anzeigen lassen (im Local-Fenster oder einfach mit der Maus drüberfahren
vielleicht findest du dann selbst heraus, wo das Problem liegt und wie es zu lösen ist.
Viel spass beim Knobeln, wenn du nicht weiterkommst, frag nochmal nach.
aber mach lieber nen neuen Tread auf, wir sind schon ziemlich weit unten.
Gruß, Daniel

Anzeige
AW: Multiline Textbox
16.07.2008 08:09:12
Bernd
Danke Daniel,
da werde ich mal die Knobelrunde einlegen. Obwohl ich nicht weiß warum Du auf einmal in dieser Zeile
Cells(zeile + 5, 2).Value = Cells(zeile + 5, 2).Value & tbgrund1.SelText
den Wert zeile+1 auf zeile + 5 erhöht hast.
Setze ich die Erhöhung des Zeilenwertes unter Case Chr(13), Chr(10)
dann schreibt mir das Programm wieder eine endlose Zeile
tbgrund1.SetFocus
For i = 1 To tbgrund1.TextLength
tbgrund1.SelStart = i
tbgrund1.SelLength = 1
Select Case tbgrund1.SelText
Case Chr(13), Chr(10)
zeile = zeile + 1
Case Else
Cells(zeile + 5, 2).Value = Cells(zeile + 5, 2).Value & tbgrund1.SelText
End Select
Next

Anzeige
AW: Multiline Textbox
16.07.2008 08:39:00
Bernd

Private Sub CommandButton1_Click()
Dim i As Long
Sheets("Tabelle").Activate
With tbgrund1
.SetFocus
For i = 0 To .TextLength
.SelStart = i
.SelLength = 1
Select Case .SelText
Case Chr(13), Chr(10)
MsgBox "Zeile zu Ende"
Case Else
Cells(.CurLine + 1, 2).Value = Cells(.CurLine + 1, 2).Value & .SelText
End Select
Next
End With
Sheets("formular").Activate
End Sub


Hallo Daniel,
ich habe die Originalversion nocheinmal durchlaufen lassen und per Debugging beobachtet. Ich kann nicht erkennen, wo das Programm erkennt, dass nun in eine neue Zeile geschrieben werden soll. Meine Änderung auf Spalte 2 wurde klaglos ausgeführt. Ich habe dann auch mal die Msgbox als Teststopp einfügt, diese wurde aber nie angefahren.
?
Gruß
Bernd

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Multiline Textbox in Excel VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

Um eine multiline Textbox in einer Userform zu verwenden und die eingegebenen Texte in eine Excel-Tabelle zu übertragen, folge diesen Schritten:

  1. Userform erstellen: Öffne den VBA-Editor in Excel (ALT + F11) und füge eine neue Userform hinzu.

  2. Textbox hinzufügen: Ziehe eine Textbox auf die Userform und stelle sicher, dass die Eigenschaft MultiLine auf True gesetzt ist.

  3. Eintrag-Button erstellen: Füge einen CommandButton hinzu, den du mit dem Namen eintragen benennst.

  4. Code für den Button: Doppelklicke auf den Button und füge den folgenden VBA-Code ein:

    Private Sub eintragen_Click()
        Dim Zelle As Range
        Dim txt As String
        Dim TextTeile() As String
        Set Zelle = Range("A1") ' Ändere die Zielzelle nach Bedarf
        TextTeile = Split(TextBox1.Text, vbCrLf) ' Zeilenumbruch erkennen
        For Each txt In TextTeile
            Zelle.Value = txt
            Set Zelle = Zelle.Offset(1, 0)
        Next
    End Sub
  5. Testen: Starte die Userform und gib mehrere Zeilen in die Textbox ein. Klicke auf den Button, um die Zeilen in die Tabelle zu übertragen.


Häufige Fehler und Lösungen

  • Problem: Der Inhalt wird nicht korrekt in die Zellen geschrieben.

    • Lösung: Stelle sicher, dass die Textbox die Eigenschaft MultiLine aktiviert hat und dass der Code die Zeilen korrekt splittet. Nutze vbCrLf für Zeilenumbrüche.
  • Problem: Nur das erste Zeichen wird in die Zelle geschrieben.

    • Lösung: Überprüfe, ob der Code zum Auslesen der Textbox korrekt ist. Stelle sicher, dass der Zähler für die Zeilen richtig gesetzt wird.

Alternative Methoden

Wenn du eine multiline vba Lösung suchst, kannst du auch eine Listbox verwenden, um die Eingaben anzuzeigen und zu verwalten. Dies ermöglicht eine einfache Bearbeitung und das Exportieren der Daten in eine Textdatei.

Hier ein alternativer Ansatz:

Private Sub eintragen_Click()
    Dim i As Long
    For i = 0 To ListBox1.ListCount - 1
        Cells(i + 1, 1).Value = ListBox1.List(i)
    Next i
End Sub

Praktische Beispiele

Ein Beispiel für die Verwendung einer textbox multiline könnte so aussehen:

Private Sub CommandButton1_Click()
    Dim i As Long
    With TextBox1
        .SetFocus
        For i = 1 To .TextLength
            .SelStart = i
            .SelLength = 1
            Select Case .SelText
                Case vbCr, vbLf
                    ' Zeilenwechsel
                Case Else
                    Cells(.CurLine + 1, 1).Value = Cells(.CurLine + 1, 1).Value & .SelText
            End Select
        Next
    End With
End Sub

Tipps für Profis

  • Nutze Debug.Print im Code, um die Ausgaben der Textbox während der Entwicklung zu überwachen.
  • Verwende On Error Resume Next vorsichtig. Es ist besser, gezielt mit Fehlern umzugehen, um die Ursachen zu identifizieren.
  • Experimentiere mit der SelStart und SelLength der vba multiline textbox, um spezifische Textteile zu bearbeiten.

FAQ: Häufige Fragen

1. Wie kann ich einen Zeilenumbruch in einer Textbox erzeugen? Um einen Zeilenumbruch in einer multiline textbox zu erzeugen, verwende vbCrLf oder Chr(13) & Chr(10).

2. Kann ich eine multiline textbox in einem bestehenden Projekt hinzufügen? Ja, du kannst jederzeit eine vba multiline textbox zu deiner Userform hinzufügen und die oben beschriebenen Schritte befolgen, um die Funktionalität zu integrieren.

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