Excel Userform - Eintrag aus Listbox in neuer Userform anzeigen und verarbeiten

jerry0110

Erfahrenes Mitglied
Hallo zusammen,

ich habe 2 Userformen erstellt.

In der ersten Userform1 zeigt er mir in einer Listbox alle Einträge in einer Tabelle an.
In der zweiten Userform2 kann ich neue Einträge machen und in die Tabelle speichern.

Jetzt möchte ich, dass der Eintrag den ich ausgewählt habe in der Listbox (Userform1) in der Userform2 anzeigen lassen.
Wenn dieser dann angezeigt wird, dann möchte ich z. B. Sachen ergänzen (z. B. die Bemerkung) und dann wieder abspeichern.
Und zwar auf der gleichen Stelle, wo der Eintrag in der Tabelle ist.

Kann mir hier jemand helfen? Ich versuche mich gerade neu mit Userforms und komme bei diesem Punkt nicht weiter.

Vielleicht ist zu sagen, dass es immer einen eindeutigen Indikator gibt und das ist in der ersten Zelle des Datensatzes die Ticketnummer.

Danke im Voraus.
 
So ich habe gestern bis heute mir einige Dinge angeschaut und mal ausprobiert.
Jetzt habe ich folgendes im meinem Code.

Die Listbox geht auf mit allen Daten die ich relevant sind.
Jetzt suche ich eine Zeile aus und die soll er dann in einer neuen Userform anzeigen.

Jedoch weiß ich nicht wie ich das "x" deklarieren soll.

Visual Basic:
Private Sub CommandButton2_Click()
Dim x As Integer
    Z = Sheets(1).UsedRange.Rows.Count
  [B][U]  x = ListBox1.ControlSource[/U][/B]
    
    temp = 0
    For i = 2 To Z
        If Cells(i, 1) = x Then
            temp = 1
            Exit For
        End If
    Next
    If temp = 1 Then
        Unload Me
        zeile = i
        UserForm3.Show
    End If
    
End Sub
 
Errr....
Wenn du eine Zeile in einer Listbox anclickst, ist der ListIndex grösser -1.
Wieso nicht einfach

Visual Basic:
If ListBox1.ListIndex>-1 Then     'Eine Zeile ist angeclickt
    Load UserForm3
    UserForm3.TextBox1.Text=ListBox1.List(ListBox1.ListIndex)
    UserForm3.Show    'vbModal bzw. vbModeLess
End If
 
Errr....
Wenn du eine Zeile in einer Listbox anclickst, ist der ListIndex grösser -1.
Wieso nicht einfach

Visual Basic:
If ListBox1.ListIndex>-1 Then     'Eine Zeile ist angeclickt
    Load UserForm3
    UserForm3.TextBox1.Text=ListBox1.List(ListBox1.ListIndex)
    UserForm3.Show    'vbModal bzw. vbModeLess
End If

Also nur für mein Verständnis.

Nach dem Then werden direkt die Daten aus meiner Tabelle in die Userform3 geladen? Also brauche ich dann nicht in der Userform3 ein Initialize zu machen?

Weil ich in der Listbox eine Menge an Daten habe die alle in verschiedene Textfeld müssen in der Userform3
 
Zuletzt bearbeitet:
Jepp, genau.
Wenn es korrekt ist, dass du in der Listbox auf Userform2 alle Daten enthält (inkl. unique identifier), sollte es dann keine Probleme mit dem zurückschreiben der Änderungen geben.
Ggf. Kannst du ja mal deine Mappe mit Fantasiedaten mal hier reinstellen, und ich schau mal, ob ich dir weiter helfen kann
 
Also ich habe den Code jetzt mal angepasst.
Er zeigt dann aber nur immer den gleichen Datensatz an und nicht den ich ausgesucht habe.
Ich geh davon aus, dass es an ListBox1.List(ListIndex, 1) liegt.

Ich kann keine Mappe hochladen.

Visual Basic:
If ListBox1.ListIndex > -1 Then   'Eine Zeile ist angeklickt
   
    Load UserForm3

    UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListIndex, 1)
    UserForm3.TextBox_St_Anfang.Text = ListBox1.List(ListIndex, 2)
    UserForm3.TextBox_St_Ende = ListBox1.List(ListIndex, 3)
    UserForm3.TextBox_Betr_Gebiet.Text = ListBox1.List(ListIndex, 4)
    UserForm3.TextBox_Betr_POP.Text = ListBox1.List(ListIndex, 5)
    UserForm3.TextBox_Betr_KR.Text = ListBox1.List(ListIndex, 6)
    UserForm3.TextBox_Betr_DSW.Text = ListBox1.List(ListIndex, 7)
    UserForm3.TextBox_Firmenname.Text = ListBox1.List(ListIndex, 8)
    UserForm3.TextBox_Adresse.Text = ListBox1.List(ListIndex, 9)
    UserForm3.TextBox_ASP.Text = ListBox1.List(ListIndex, 10)
    UserForm3.TextBox_Schadenstelle = ListBox1.List(ListIndex, 11)
    UserForm3.ComboBox_Kabeltyp.Text = ListBox1.List(ListIndex, 12)
    UserForm3.ComboBox_Darkfiber.Text = ListBox1.List(ListIndex, 13)
    UserForm3.ComboBoxWDM_Strecke = ListBox1.List(ListIndex, 14)
    UserForm3.ComboBox_DP_TYP = ListBox1.List(ListIndex, 15)
    UserForm3.TextBox_Betr_PK.Text = ListBox1.List(ListIndex, 16)
    UserForm3.TextBox_Betr_Grosskunden = ListBox1.List(ListIndex, 17)
    UserForm3.Textbox_Bemerkung.Text = ListBox1.List(ListIndex, 18)

   
    UserForm3.Show    'vbModal bzw. vbModeLess
End If

End Sub
 
Hier mal die Datei.

was natürlich noch fehlt ist, dass der gleiche Datensatz dann überschrieben wird. und nicht, dass er dann neu speichert und ich habe den Datensatz 2 mal.
 

Anhänge

  • SMNOC.zip
    38,9 KB · Aufrufe: 6
Also ich habe den Code jetzt mal angepasst.
Er zeigt dann aber nur immer den gleichen Datensatz an und nicht den ich ausgesucht habe.
Ich geh davon aus, dass es an ListBox1.List(ListIndex, 1) liegt.

Ich kann keine Mappe hochladen.

Visual Basic:
If ListBox1.ListIndex > -1 Then   'Eine Zeile ist angeklickt
 
    Load UserForm3

    UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListIndex, 1)
    UserForm3.TextBox_St_Anfang.Text = ListBox1.List(ListIndex, 2)
    UserForm3.TextBox_St_Ende = ListBox1.List(ListIndex, 3)
    UserForm3.TextBox_Betr_Gebiet.Text = ListBox1.List(ListIndex, 4)
    UserForm3.TextBox_Betr_POP.Text = ListBox1.List(ListIndex, 5)
    UserForm3.TextBox_Betr_KR.Text = ListBox1.List(ListIndex, 6)
    UserForm3.TextBox_Betr_DSW.Text = ListBox1.List(ListIndex, 7)
    UserForm3.TextBox_Firmenname.Text = ListBox1.List(ListIndex, 8)
    UserForm3.TextBox_Adresse.Text = ListBox1.List(ListIndex, 9)
    UserForm3.TextBox_ASP.Text = ListBox1.List(ListIndex, 10)
    UserForm3.TextBox_Schadenstelle = ListBox1.List(ListIndex, 11)
    UserForm3.ComboBox_Kabeltyp.Text = ListBox1.List(ListIndex, 12)
    UserForm3.ComboBox_Darkfiber.Text = ListBox1.List(ListIndex, 13)
    UserForm3.ComboBoxWDM_Strecke = ListBox1.List(ListIndex, 14)
    UserForm3.ComboBox_DP_TYP = ListBox1.List(ListIndex, 15)
    UserForm3.TextBox_Betr_PK.Text = ListBox1.List(ListIndex, 16)
    UserForm3.TextBox_Betr_Grosskunden = ListBox1.List(ListIndex, 17)
    UserForm3.Textbox_Bemerkung.Text = ListBox1.List(ListIndex, 18)

 
    UserForm3.Show    'vbModal bzw. vbModeLess
End If

End Sub
Ich habe deinen Fehler gefunden.
UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListIndex, 1)
Du benutzt ListIndex ohne Qualifikation.
UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListBox1.ListIndex, 1)
etc.

Was das speichern betrifft:
In CommandButton2 von UserForm3 musst du zuerst die Ticketnummer suchen.
Im jetzigen Code fügst du einfach eine neue Zeile unten an.
Um einen Wert in einer Spalte/Zeile zu finden gibt es verschiedene Möglichkeiten.
Die einfachste ist die Spalte von oben nach unten zu durchlaufen, und die Zelle mit dem gesuchten Wert vergleichen. Da die Ticketnummer Ein-Eindeutig ist, kannst du bei Gefunden=Wahr aus der Schleife springen, und hast automatisch die Zeilennummer. Der Rest vom Code kann gleich bleiben
 
Ich habe deinen Fehler gefunden.
UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListIndex, 1)
Du benutzt ListIndex ohne Qualifikation.
UserForm3.TextBox_Ticketnummer.Text = ListBox1.List(ListBox1.ListIndex, 1)
etc.

Was das speichern betrifft:
In CommandButton2 von UserForm3 musst du zuerst die Ticketnummer suchen.
Im jetzigen Code fügst du einfach eine neue Zeile unten an.
Um einen Wert in einer Spalte/Zeile zu finden gibt es verschiedene Möglichkeiten.
Die einfachste ist die Spalte von oben nach unten zu durchlaufen, und die Zelle mit dem gesuchten Wert vergleichen. Da die Ticketnummer Ein-Eindeutig ist, kannst du bei Gefunden=Wahr aus der Schleife springen, und hast automatisch die Zeilennummer. Der Rest vom Code kann gleich bleiben

Ich wusste doch das es an dem blöden Listbox1 liegen muss :)
Danke dafür

Für den Rest mach ich mich mal dran und wenn es nicht klappt melde ich mich.
 
Also ich habe jetzt was programmiert, was für mich eigentlich eindeutig ist.
die variable zeile ist eine globale variable.

Wenn ich die for schleife durchlaufen lasse dann findet er immer die Zeile 24 wo nichts steht.
Wenn ich die Ticketnummer z. B. 6 habe dann müsste er in Zeile 7 diesen Datensatz finden.
Findet er aber nicht.

Und dann bekomme ich einen Fehlercode 1004 wenn ich dann die Werte übertragen möchte.

Und warum setzt er die Checkbox nicht wenn der Wert auf True steht?

Visual Basic:
Private Sub CommandButton2_Click()

    Dim x As Long
   
    Z = Worksheets("Datentabelle").UsedRange.Rows.Count
    x = Me.TextBox_Ticketnummer
    temp = 0
   
    For i = 1 To Z
        If Worksheets("Datentabelle").Range("P" & i) = x Then
            temp = 1
            Exit For
        End If
    Next
   
    If temp = 1 Then
        Unload Me
        zeile = i
       
    End If
   
       
        Worksheets("Datentabelle").Range("A" & zeile) = TextBox_Ticketnummer
        Worksheets("Datentabelle").Range("B" & zeile) = TextBox_St_Anfang
        Worksheets("Datentabelle").Range("C" & zeile) = TextBox_St_Ende
        Worksheets("Datentabelle").Range("D" & zeile) = TextBox_Betr_Gebiet
        Worksheets("Datentabelle").Range("E" & zeile) = TextBox_Betr_POP
        Worksheets("Datentabelle").Range("F" & zeile) = TextBox_Betr_KR
        Worksheets("Datentabelle").Range("G" & zeile) = TextBox_Betr_DSW
        Worksheets("Datentabelle").Range("H" & zeile) = TextBox_Firmenname
        Worksheets("Datentabelle").Range("I" & zeile) = TextBox_Adresse
        Worksheets("Datentabelle").Range("J" & zeile) = TextBox_ASP
        Worksheets("Datentabelle").Range("K" & zeile) = TextBox_Schadenstelle
        Worksheets("Datentabelle").Range("L" & zeile) = ComboBox_Kabeltyp
        Worksheets("Datentabelle").Range("M" & zeile) = ComboBox_Darkfiber
        Worksheets("Datentabelle").Range("N" & zeile) = ComboBoxWDM_Strecke
        Worksheets("Datentabelle").Range("O" & zeile) = ComboBox_DP_TYP
        Worksheets("Datentabelle").Range("P" & zeile) = TextBox_Betr_PK
        Worksheets("Datentabelle").Range("Q" & zeile) = TextBox_Betr_Grosskunden
        Worksheets("Datentabelle").Range("R" & zeile) = Textbox_Bemerkung
        Worksheets("Datentabelle").Range("S" & zeile) = CheckBox_Störung_erledigt

   
End Sub
 
Zurück