ich habe eine Datei um Produktionszahlen zu erfassen und auszuwerten. Die vorhandene Userform funktioniert auch wunderbar.
Aber ich möchte diese gerne noch optimieren, auch um evtl Eingabefehler zu vermeiden.
Ich möchte die Textfelder für Name, Artikel und Vorgang jetzt zb durch Komboboxen ersetzen, die durch die Angaben im Blatt "Daten" gefüllt werden können, wobei es optimal wäre, wenn die Auswahl in Vorgang schon durch die Auswahl in Artikel gefiltert wird.
Ich habe mich schon alleine daran Versucht. Auch indem ich versucht habe, Codes aus einer ähnlichen UF einzubinden. Aber da kam es immer zu Fehlern, oder es passierte Garnix.
Es wäre schön, wenn mich jemand dabei unterstützen könnte.
' Einlesen der Daten bis zur Letzten Zeile letztezeile = ThisWorkbook.Worksheets(Ergtab).Range("G" & Rows.Count).End(xlUp).Row ' Übergabe an die Comboboxen in Userform Neue_Position With UF_Start.CB_Name .RowSource = Ergtab & "!G2:G" & letztezeile .ListIndex = 0 .SetFocus: .SelStart = 0: .SelLength = Len(.Text) End With
Ergtab ist bei mir die Ergebnisstabelle, also bei dir Daten. Hier als Beispiel für Spalte G. War bissel faul um den Code jetzt noch anzupassen.
danke für die Antwort. Aber ich habe es jetzt ersteinmal so gelöst, das ich mir zusätzlich die CB eingefügt habe, und bei klick das in die entsprechende Textbox eingetragen wird.
Ich würde aber eigentlich gerne den Inhalt der CB auf die wirklichen Einträge begrenzen.(momentan habe ich festgelegte Bereiche)
Code zum befüllen der CB im UF Initialize Code, indem ich aber auch nicht zu viel rumdoktorn möchte
Bau doch wie ich die Letzte Zeile mit ein. Lass dir also raussuchen, wo die sich die letzte Beschriebene Zeile befinden. Auf dein Beispiel bezogen wäre das dann folgender Code
Code:
Dim letztezeile_ Nas double Dim letztezeile_P as double letztezeile_N = ThisWorkbook.Worksheets("Deine Tabelle").Range("N" & Rows.Count).End(xlUp).Row letztezeile_P = ThisWorkbook.Worksheets("Deine Tabelle").Range("P" & Rows.Count).End(xlUp).Row
Du hast aber auch deine Tabelle eingefügt oder? Also da wo die Informationen stehen? Eine weitere mögliche Fehlerquelle ist die erste Leerzeile in deinem Tabellenblatt Daten. Lösch die mal raus
ich habe jetzt auch versucht die Codes der Buttons speichern und neuer Eintrag zu kombinieren, was die Eingabe ja auch vereinfachen würde. Aber leider funzt das einfache aneinandersetzen der Codes nicht.
Code Speichern:
Code:
'Speichern Schaltfläche Ereignisroutine Private Sub CommandButton3_Click() Dim lZeile As Long Dim loLetzte As Long
'Wenn kein Datensatz in der ListBox markiert wurde, wird die Routine beendet If ListBox1.ListIndex = -1 Then Exit Sub
loLetzte = Tabelle33.Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1)
'Wir müssen prüfen, ob die ID Spalte auch gefüllt ist!! If TextBox1.Text = "" Then 'Meldung ausgeben MsgBox "Sie müssen mindestens eine ID eingeben!", vbCritical + vbOKOnly, "FEHLER!" 'Abbrechen der Speicherroutine Exit Sub End If 'Ausbauoption: Prüfen, ob die ID in Tabelle1 Spalte 1 schon vorhanden ist!
'Zum Speichern benötigen wir die Zeilennummer des ausgewählten Datensatzes lZeile = 2 'Start in Zeile 2, Zeile 1 sind ja die Überschriften 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht For lZeile = 2 To loLetzte
'Datensatz ID Spalte mit selektiertem Eintrag der ListBox vergleichen If ListBox1.Text = Tabelle33.Cells(lZeile, 1).Value Then
'Eintrag gefunden, TextBoxen in die Zellen schreiben Tabelle33.Cells(lZeile, 2).Value = TextBox1.Text Tabelle33.Cells(lZeile, 3).Value = TextBox2.Text Tabelle33.Cells(lZeile, 4).Value = TextBox3.Text Tabelle33.Cells(lZeile, 5).Value = TextBox4.Text Tabelle33.Cells(lZeile, 6).Value = TextBox5.Text Tabelle33.Cells(lZeile, 1).Value = TextBox6.Text Tabelle33.Cells(lZeile, 7).Value = TextBox7.Text 'Die ListBox muss nun neu geladen werden 'allerdings nur, wenn sich der Name (ID) geändert hat If ListBox1.Text <> TextBox1.Text Then Call UserForm_Initialize If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0 End If 'Call sortieren Exit Sub 'Vorzeitiges Ende, da der Datensatz schon gefunden ist
End If
Next lZeile 'Call sortieren End Sub
Code neuer Eintrag:
Code:
'Neuer Eintrag Schaltfläche Ereignisroutine Private Sub CommandButton1_Click() Dim lZeile As Long Dim loLetzte As Long
'Wenn der Benutzer einen neuen Eintrag erzeugen möchte, 'erstellen wir einen neuen Eintrag in der ListBox und markieren 'diesen, damit der Benutzer die Daten eintragen kann
loLetzte = Tabelle33.Cells(Rows.Count, 1).End(xlUp).Row ' letzte belegte in Spalte A (1) lZeile = loLetzte + 1 'Nun steht lZeile in der ersten leeren Zeile von Tabelle1 'Neuen Eintrag in die Tabelle1 schreiben, Spalte ID muss gefüllt sein, damit 'unsere Routinen die Zeile wiederfinden! Tabelle33.Cells(lZeile, 1) = " " & lZeile
'Und neuen Eintrag in die UserForm eintragen ListBox1.AddItem Tabelle33.Cells(lZeile, 1)
'Den neuen Eintrag markieren mit Hilfe des ListIndexes ListBox1.ListIndex = ListBox1.ListCount - 1 'Durch das Click Ereignis der ListBox werden die Daten automatisch geladen