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

Forumthread: Text aus Textbox in Listbox einlesen

Text aus Textbox in Listbox einlesen
07.03.2018 23:01:33
Martin
Hallo Forum-Community,
ich bin Excel und VBA Neuling. Excelbasiswissen ist vorhanden wurde aber lange nicht mehr genutzt. Nun habe ich ein kleines Projekt für die Arbeit übenommen und komme an einer Stelle nicht mehr voran auch nach tagelanger Suche bin ich leider nicht weitergekommen.
Ich hoffe ihr könnt mir bei meiner Poblemlösung evlt weiterhelfen.
Wahrscheinlich ist es für ein Profi eine ganz banale einfache Sache.
Zur Problemstellung. Ich habe eine Userform erstellt mit einer Listbox, eine Textbox und 3 command button.
Ich möchte Daten aus einer Tabelle1 in die Listbox einlesen. Das klappt bis auf eine Kleinigkeit soweit. Beim einlesen werden auf nicht sichtbar gestellte nullwerte mit eingelesen und sihtbar dargestellt. Diese würde ich auch gerne in der Listbox nicht sichtbar haben oder gar nicht mit einlesen. je nachdem was möglich ist.
2.Problem ich möchte gerne einen Text aus der Textbox per Button in die Listbox an eine beliebige markierte Stelle zwischen den vorhanden Zeilen einfügen.
Nachdem einfügen sollen die nun so ergänzten Daten in eine neue Tabelle2 ausgegeben werden. Das ausgeben in Tabelle2 funktionert auch soweit.
Vielen Dank und Grüsse
Martin
Anbei der bisherige Code
Option Explicit
Private Sub Button_Take_Click()
Dim I As Integer
With ListBox1
For I = 0 To .ListCount - 1
If .Selected(I) Then
Sheets("Rezeptdruck").Cells(Rows.Count, 1).End(xlUp).Offset(1) = .List(I, 0)
Sheets("Rezeptdruck").Cells(Rows.Count, 2).End(xlUp).Offset(1) = .List(I, 1)
Sheets("Rezeptdruck").Cells(Rows.Count, 3).End(xlUp).Offset(1) = .List(I, 2)
Sheets("Rezeptdruck").Cells(Rows.Count, 4).End(xlUp).Offset(1) = .List(I, 3)
Sheets("Rezeptdruck").Cells(Rows.Count, 5).End(xlUp).Offset(1) = .List(I, 4)
Sheets("Rezeptdruck").Cells(Rows.Count, 6).End(xlUp).Offset(1) = .List(I, 5)
End If
Next
End With
End Sub

Private Sub Einfügen_Click()
With ListBox1
.AddItem "", 4 'neue leere Zeile 2
.List(5, 0) = TextBox1
.Selected(.ListIndex + 1) = True
End With
End Sub
Private Sub Userform_Initialize()
Dim I As Integer
ListBox1.ColumnCount = 6
For I = 1 To 32
ListBox1.AddItem Cells(I, 1)
ListBox1.List(I - 1, 1) = Cells(I, 2)
ListBox1.List(I - 1, 2) = Cells(I, 3)
ListBox1.List(I - 1, 3) = Cells(I, 4)
ListBox1.List(I - 1, 4) = Cells(I, 5)
ListBox1.List(I - 1, 5) = Cells(I, 6)
ListBox1.List(I - 1, 6) = Cells(I, 7)
Next I
End Sub

Private Sub Button_Cancel_Click()
Unload meineHinweise
End Sub

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text aus Textbox in Listbox einlesen
08.03.2018 08:10:32
Hajo_Zi
Die meisten bauen Deine Datei nicht nach. Die Zeit hat schon jemand investiert.
Ein Nachbau sieht meist anders aus als das Original. Darum sollte das Original verlinkt werden.
Die meisten möchten es am Original testen um den gleichen Fehler zu erhalten.
Benutze hier im Forum die Funktion zum hochladen. Falls Du die nicht benutzen möchtest beachte, von unsicheren Servern wie z.B. www.file-upload.net lade ich keine Datei runter. (lt. Einschätzung meines Virenprogramms)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Anzeige
AW: Text aus Textbox in Listbox einlesen
08.03.2018 21:08:20
Mullit
Hallo,
klar, könnte man was mit Arrays proggen, mußt Du wissen, ob Du noch was brauchst und ne Bsp.-mappe wär tatsächl. nicht verkehrt...
Gruß, Mullit
AW: Text aus Textbox in Listbox einlesen
08.03.2018 21:47:27
Martin
Guten Abend,
hier die gewünschte Datei, ich hoffe das es aussreichend ist da in dem Rest einige Firmeninterne Daten enthalten sind die ich nicht veröffentlichen darf.
Wäre super wenn es dafür eine Lösung gibt.
Vieln Dank erstmal
https://www.herber.de/bbs/user/120298.xlsm
Anzeige
AW: Text aus Textbox in Listbox einlesen
09.03.2018 19:56:16
Mullit
Hallo,
ok, da is noch Blattschutz in der Mappe und die Nullwerte kann ich auch nicht entdecken, aber ok, ich geb Dir mal das, was ich eh schon vorher geproggt hatte, enthält beide von Dir genannten Varianten, mußt Du halt mal selbst anpassen...
Option Explicit

Private Sub CommandButton1_Click() '// Zeilen- und Elementeingabe über Inputbox.. 
Dim vntInput As Variant
Dim strText As String
With ListBox1
     If .ListIndex > -1 Then
        If .Selected(pvargIndex:=.ListIndex) Then
           strText = "Bitte eine Spalt.-Nr. zwischen 1 und " & .ColumnCount & " eingeben."
           Do
              vntInput = Application.InputBox( _
                 Prompt:=strText, Title:="Eingabe", Type:=1)
              If VarType(vntInput) = vbBoolean And vntInput = False Then Exit Sub
              If IsNumeric(vntInput) And (vntInput < 1 Or vntInput > .ColumnCount) Then
                Call MsgBox(Prompt:=strText, Buttons:=vbExclamation)
              Else
                Exit Do
              End If
           Loop
           Call .AddItem(pvargIndex:=.ListIndex)  'neue leere Zeile 
           .List(pvargIndex:=.ListIndex - 1, pvargColumn:=vntInput - 1) = TextBox1.Value
        End If
     Else
        Call MsgBox("Bitte ein Element auswählen...", vbExclamation)
     End If
End With
End Sub

Private Sub UserForm_Activate() '// Var.1: Nullwerte tauchen als Lücken in der Listbox auf... 
Dim avntArray() As Variant
Dim ialngRow As Long, ialngCoumn As Long
avntArray = Cells(1, 2).Resize(Cells(Rows.Count, 2).End(xlUp).Row, 6).Value
For ialngRow = 1 To Ubound(avntArray, 1)
   For ialngCoumn = 1 To Ubound(avntArray, 2)
      If avntArray(ialngRow, ialngCoumn) = 0 Then avntArray(ialngRow, ialngCoumn) = Empty
   Next
Next
With ListBox1
    .ColumnCount = 6
    .List() = avntArray()
End With
End Sub

'// Var.2: Nullwerte werden komplett nicht eingelesen, 
'//   die Listen verschieben sich dann natürlich... 
Private Sub UserForm_Activate()
Dim avntArray() As Variant
Dim astrOutput() As String
Dim ialngRow As Long, ialngCoumn As Long
Dim ialngCount As Long, ialngIndex As Long
avntArray = Cells(1, 2).Resize(Cells(Rows.Count, 2).End(xlUp).Row, 6).Value
For ialngCoumn = 1 To Ubound(avntArray, 2)
   ialngCount = 0
   For ialngRow = 1 To Ubound(avntArray, 1)
      If avntArray(ialngRow, ialngCoumn) <> 0 Then
        If ialngCount > ialngIndex - 1 Then _
          Redim Preserve astrOutput(5, ialngIndex) As String
        astrOutput(ialngCoumn - 1, ialngCount) = avntArray(ialngRow, ialngCoumn)
        ialngIndex = ialngIndex + 1
        ialngCount = ialngCount + 1
      End If
   Next
Next
With ListBox1
    .ColumnCount = 6
    .Column() = astrOutput()
End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: Text aus Textbox in Listbox einlesen
09.03.2018 23:31:37
Martin
Hallo Mullit,
bitte entschuldige für die unnötige zusätzliche Arbeit.Das ist alles hier neu für mich und ich habe leider nur ein paar std am Abend zeit mich damit zu beschäftigen
Vielen Dank für den Code. Ist genauso wie ich es mir vorgestellt habe.
Absolut Top Arbeit von dir und funktioniert einwandfrei.
Viele Grüsse Martin
Anzeige
AW: null Problemo, prima, freut mich...owT
09.03.2018 23:39:23
Mullit
;
Anzeige
Anzeige

Infobox / Tutorial

Text aus Textbox in Listbox einlesen


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Erstelle eine Userform mit einer Listbox (ListBox1), einer Textbox (TextBox1) und mindestens einem Command Button.

  2. Listbox mit Daten füllen: Im Userform_Initialize()-Event kannst du die Listbox mit Daten aus einer Tabelle befüllen. Hier ein Beispielcode:

    Private Sub Userform_Initialize()
        Dim I As Integer
        ListBox1.ColumnCount = 6
        For I = 1 To 32
            ListBox1.AddItem Cells(I, 1)
            ListBox1.List(I - 1, 1) = Cells(I, 2)
            ListBox1.List(I - 1, 2) = Cells(I, 3)
            ListBox1.List(I - 1, 3) = Cells(I, 4)
            ListBox1.List(I - 1, 4) = Cells(I, 5)
            ListBox1.List(I - 1, 5) = Cells(I, 6)
        Next I
    End Sub
  3. Einfügen von Text in die Listbox: Verwende einen Button, um den Text aus der Textbox in die Listbox einzufügen. Hier ein Beispiel:

    Private Sub Einfügen_Click()
        With ListBox1
            .AddItem "", 4 'fügt eine neue leere Zeile ein
            .List(5, 0) = TextBox1
            .Selected(.ListIndex + 1) = True
        End With
    End Sub
  4. Daten ohne Nullwerte darstellen: Um sicherzustellen, dass Nullwerte nicht in der Listbox angezeigt werden, kannst du das folgende Beispiel verwenden:

    Private Sub UserForm_Activate()
        Dim avntArray() As Variant
        avntArray = Cells(1, 2).Resize(Cells(Rows.Count, 2).End(xlUp).Row, 6).Value
        For i = 1 To UBound(avntArray, 1)
            For j = 1 To UBound(avntArray, 2)
                If avntArray(i, j) = 0 Then avntArray(i, j) = Empty
            Next j
        Next i
        ListBox1.List() = avntArray
    End Sub

Häufige Fehler und Lösungen

  • Problem: Nullwerte erscheinen in der Listbox.

    • Lösung: Stelle sicher, dass du Nullwerte in deinem Code behandelst, wie im vorherigen Schritt gezeigt.
  • Problem: Text aus der Textbox wird nicht korrekt in die Listbox eingefügt.

    • Lösung: Überprüfe, ob der Index der Listbox korrekt gesetzt ist und dass die Textbox nicht leer ist.

Alternative Methoden

Eine alternative Methode wäre, die Daten mit Hilfe von Arrays zu verarbeiten. Hierbei kannst du die Daten in ein Array einlesen und dann gezielt in die Listbox übertragen, ohne dass Nullwerte angezeigt werden.

Dim dataArray As Variant
dataArray = Range("A1:F32").Value ' Beispiel für einen Datenbereich
For Each item In dataArray
    If item <> 0 Then ListBox1.AddItem item
Next item

Praktische Beispiele

  • Beispiel 1: Fülle die Listbox mit Werten aus einer Tabelle, während du die Nullwerte ignorierst.
  • Beispiel 2: Implementiere eine Funktion, um Text aus der Textbox an einer bestimmten Stelle in der Listbox einzufügen.

Tipps für Profis

  • Verwende ListBox1.Text um den aktuell ausgewählten Text der Listbox zu erhalten.
  • Du kannst die Listbox auch dynamisch anpassen, indem du die ColumnCount-Eigenschaft änderst, basierend auf den Daten, die du laden möchtest.
  • Achte darauf, den Blattschutz zu deaktivieren, wenn Änderungen an den Zellen vorgenommen werden müssen.

FAQ: Häufige Fragen

1. Kann ich die Listbox so konfigurieren, dass sie mehrere Auswahlen erlaubt? Ja, setze die MultiSelect-Eigenschaft der Listbox auf fmMultiSelectMulti.

2. Wie kann ich die Listbox zurücksetzen? Verwende die Methode .Clear der Listbox, um alle Einträge zu entfernen:

ListBox1.Clear

3. Ist es möglich, die Listbox in einer Excel-Webanwendung zu verwenden? Die Listbox in VBA ist spezifisch für Desktop-Anwendungen. Webanwendungen nutzen andere Technologien wie HTML und JavaScript.

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