Hallo zusammen,
unter Excel VBA-Forum - Das Forum zu Microsoft Excel VBA habe ich schon mal gefragt. Aber da komme ich nicht weiter. Deswegen versuche ich es hier mal, zumal ich hier auch meine Excelmappe hochladen kann.
Ich habe unter Excel 2021 eine Mappe mit Makros angelegt. Dort ein Formular mit mehreren TextBoxen/Labels, 2 ComboBoxen und einem Button zum Speichern.
Geht um eine kleine Kunden-/Adreßverwaltung. Ich würde Euch gerne mal meine Mappe zeigen. Kann ich hier keine Anlagen beifügen?
Ich frage die wichtigsten TextBoxen auf Inhalt ab. Ist kein Eintrag, kommt eine Fehlermeldung.
Gebe ich die Daten ein und klicke auf Speichern, werden die Daten in einer Tabelle reinkopiert. Danach werden die TextBoxen gelöscht, um dann weitere Daten einfügen zu können.
Ich hatte schon was in Facebook-Gruppe (Excel VBA Programmierung | Facebook) geschrieben. Aber mir konnte da scheinbar niemand mehr helfen, es kam zumindest nix mehr.
Ich hatte die Mappe in FB hochgeladen. Jetzt schreibt mir einer, das UserForm sollte sich automatisch öffnen (das bekomme ich noch hin), die Quelltexte könnten optimiert werden und eine Funktion zum Suchen/Ändern von Einträgen. Ich weiß nicht wo ich da was optimieren könnte. Und Daten suchen/ändern, wie mache ich das? Muß ich ein neues zusätzliches Formular für die Suche/Änderung anlegen und dann ne Abfrage machen? Da ich gerade erst ein Fernstudium VBA-Programmierung mache, habe ich noch nicht viele Kenntnisse.
ich habe mal eine Listobjekt (formatierte Tabelle "Tbl_Stammdaten") draus gemacht und den Code zum Eintragen dazu passend geschrieben.
Code:
Option Explicit
Private Sub cmd_Speichern_Click()
Dim i&, arrZ(), arrCnt(): arrCnt = Array("cmb_Anrede", "txt_Titel", "txt_Vorname", "txt_Name", "txt_Strasse", "txt_Hausnummer", "txt_PLZ", "txt_Ort", "cmb_Land", "txt_Telefon", "txt_Handy", "txt_EMail", "txt_Internet", "txt_Kundennummer")
ReDim arrZ(1 To 1, 1 To UBound(arrCnt) + 1)
For i = LBound(arrCnt) To UBound(arrCnt)
arrZ(1, i + 1) = Controls(arrCnt(i))
arrCnt(i) = ""
Next i
Tabelle1.ListObjects(1).ListRows.Add.Range.Resize(1, UBound(arrZ, 2)) = arrZ
End Sub
Private Sub UserForm_Initialize()
cmb_Anrede.List = Array("Frau", "Herr", "Divers")
cmb_Land.List = Array("Deutschland", "Österreich", "Schweiz", "Spanien")
cmb_Anrede.ListIndex = 0
cmb_Land.ListIndex = 0
End Sub
sorry Pflichtfelder hatte ich vergessen. Die Prozedur mit Pflichtfelder dann so:
Code:
Private Sub cmd_Speichern_Click()
Dim i&, arrZ(), arrCnt(): arrCnt = Array("cmb_Anrede", "txt_Titel", "txt_Vorname", "txt_Name", "txt_Strasse", "txt_Hausnummer", "txt_PLZ", "txt_Ort", "cmb_Land", "txt_Telefon", "txt_Handy", "txt_EMail", "txt_Internet", "txt_Kundennummer")
ReDim arrZ(1 To 1, 1 To UBound(arrCnt) + 1)
For i = 2 To 7
If Controls(arrCnt(i)) = "" Then
MsgBox "Das Feld """ & arrCnt(i) & """ darf nicht leer bleiben!", vbExclamation, "fehlende Eingabe"
Controls(arrCnt(i)).SetFocus
Exit Sub
End If
Next i
For i = LBound(arrCnt) To UBound(arrCnt)
arrZ(1, i + 1) = Controls(arrCnt(i))
arrCnt(i) = ""
Next i
Tabelle1.ListObjects(1).ListRows.Add.Range.Resize(1, UBound(arrZ, 2)) = arrZ
End Sub
hier mal ein erster Schritt zum Weg einer brauchbaren Tabellenverwaltung via Userform. Erst mal habe ich nur Neu Eintragen nebst Fehlerbehandlung eingebaut.
Dies funktioniert auf Basis Listobjekt. Den Rest: Filtern / Eintrag ändern / Löschen kann ich bei Bedarf noch nachreichen.
Aber versuche erst mal auf dieser Basis weiter zu bauen.
ich habe Probleme den Code zu verstehen:
Private Sub ListBoxLaden()
Dim arrtab(), i&, j&
With Tabelle1.ListObjects(1)
If .DataBodyRange Is Nothing Then Exit Sub
arrtab = .DataBodyRange.Value
ReDim arrList(1 To UBound(arrtab), 1 To UBound(arrtab, 2) + 1)
For i = LBound(arrList) To UBound(arrList)
arrList(i, 1) = i
For j = 2 To UBound(arrList, 2)
arrList(i, j) = arrtab(i, j - 1)
Next j
Next i
End With
ListBox1.List = arrList
End Sub
Was ist Tabelle1.ListObjects(1) ?
Laut Gemini ist ListObjects(1) der 1. Eintrag in der Auflistung. Was für eine Auflistung? Tabelle1 ist doch ein Object oder gibts unter Tabelle1 mehrere Einträge?
DataBodyRange ist der Datenbereich einer intelligenten Tabelle. Was heißt das? Ist das in der Tabelle die einzelnen Zeilen beginnend mit der 2. Zeile (A2, B2, C2...)?
Wenn ich bei UserForm_Initialize() msgbox Tabelle1.ListObjects(1).DataBodyRange und Tabelle1.ListObjects(1).DataBodyRange.Value ausgeben möchte, erhalte ich einen Laufzeitfehler 13: Typen unverträglich.
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Hinweis auf Angebot
Excel-Inside - lang Keine
Lösung gefunden? Du kannst Dich gerne an
unser erfahrenes Experten-Team
wenden um dein Anliegen zu besprechen. Gerne
erstellen wir auf dieser Basis ein Angebot. Sende deine Anfrage
einfach per
E-Mail an anfrage@excel-inside.de