Via Userform Eintrag suchen, kopieren und Inhalte löschen
Hallo @ all,
Ich brauche eure Hilfe.
Ich möchte über eine Userform Name und Vorname in einer Excel (2007)Datenbank (Tabelle1) suchen, den Eintrag (komplette Zeile) kopieren, Daten dann in Tabelle2 einfügen & dann den Datensatz aus der Tabelle1 löschen.
Wollte dies über den Makrorecorder aufzeichnen, bekomme es aber nicht hin!
Hat jemand dafür eine Lösung (VBA)?
MfG Benjamin
Antwort schreiben
Antwort 1 von Beverly vom 10.05.2022, 12:23 Options
Hi Benjamin,
verwende zum Suchen den Befehl Find (in der VBA-Hilfe zu finden unter "Find-Methode")
Bis später,
Karin
Antwort 2 von BenjaminM vom 10.05.2022, 14:09 Options
Hallo Karin,
da haben wir ja schon 2 Themen...
Hab zwar schon vorher was gefunden in der VBA Hilfe, bekomme damit aber nix auf die Reihe!
Hier mal ein
Bsp. wie ich mir das vorstelle, aber mir fehlt da noch alles!
Wollte halt nur gerne so ne Map haben damit ich nicht immer 2400 Datensätze per Hand durchsuchen muss. Da kommt aber auch wieder was mit Abhängigkeiten von Combos ins Spiel, und ich habs immer noch nicht so drauf mit den Codes!
Hast du evtl. (oder auch wer anderes) die Möglichkeit mir was zu bauen? Will nicht schmarotzen, aber mir fehlen halt noch soviel Zusammenhänge.
Bastle mir immer irgendwie was zusammen damit es funtz!
Hierzu hab ich aber leider noch garnichts.
Und weiß auch nicht ob das geht wie ich mir das vorstelle!
Ich würde gerne in Combobox1 nach den Anfangsbuchstaben (alphabetisch) aus Spalte "B" suchen, dann in Combobox2 die Namen filtern die mit den Buchstaben in CB1 übereinstimmen,
und dann in CB3 die Vornamen gefilter bekommen.
Wenn ich dann den Betreffenden Eintrag habe, diesen kopieren, Zeile löschen und in Tabelle2 den Datensatz aus der Zwischanablage in die letzte freie Zeile einfügen.
Ist das Machbar?
MfG Benjamin
Antwort 3 von Beverly vom 10.05.2022, 14:59 Options
Hi Benjamin,
machbar ist mit VBA (fast) alles, aber dazu sollte man schon die entsprechenden Kenntnisse besitzen. Nichts für ungut, aber ich würde an deiner Stelle erst einmal mit "kleineren Brötchen" anfangen - das was du vorhast, grenzt an Auftragsprogrammierung und so etwas macht eine Softwarefirma für teuer Geld.
Wenn du mit Find nicht klar kommst - es gibt noch die Möglichkeit, das Tabellenblatt per Autofilter zu filtern - das kannst du mit dem Makrorekorder aufzeichnen und anstelle der beim Aufzeichnen fest eingetragenen Filterkriterien setzt du dann den Inhalt deiner ComboBoxen. Das alles schreibst du in das Change-Ereignis der 1. bzw. 2. ComboBox.
Das Kopieren kannst du ebenfalls mit dem Makrorekoerder aufzeichnen, nur dass du dann anstelle der festen Zeilenbezeichnung der Zielzeile eine variable für die erste freie Zeile der Zieltabelle setzt. Die erst freie Zeile in Spalte A kann man z.B. auf diese Weise feststellen:
Dim loLetzte As Long
With Worksheets("Zieltabelle")
loLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
End With
Bis später,
Karin
Antwort 4 von BenjaminM vom 12.05.2022, 15:29 Options
Hallo Karin,
okay, dann werd ich versuchen kleiner Brötchen zu backen.
Hab jetzt etwas gebastelt, und das mit dem Sortieren haut schon hin!
Aber ich komme ´mit der Find Methode nicht klar!
Hab nun einige Beiträge gelesen, jedoch funtz das bei mir nicht!
Wie muss ich so eine Find Methode denn aufbauen?
Hab da mir einiges zusammen gesucht, aber ganz rund ist das alles nicht!
Bekomme nun die Datensätze nicht in meine Combobox (oder sollte ich da mit nem Listenfeld arbeiten?).
Kannst du mir da noch mal helfen?
Und die Sache mit dem rauskopieren und einfügen in "Tabelle3", krieg ich mit dem Makrorecorder auch nicht auf die Reihe, weil ich die Klicks in der Userform nicht aufzeichnen kann.
Wäre nett wenn du mir noch mal zur Hand gehen könntest.
Hier die
Datei, mit dem was ich hab.
MfG & vielen Dank
Benjamin
Antwort 5 von fedjo vom 13.05.2022, 16:42 Options
Hallo Benjamin,
hab in deiner Datei:
Sortieren eine neue UserForm angelegt.
Auswahl nach Name dann Auswahl nach Vorname.
Daten in Tabelle3 eintragen.
Zeile löschen.
Man kann natürlich auch die Befehle (Auswahl, Eintragen, Löschen)
noch miteinander verbinden.
Gruß
fedjo
Antwort 6 von BenjaminM vom 25.05.2022, 15:03 Options
Hallo Fedjo,
hab versucht deine Datei in meine einzubauen, bin aber scheinbar zu blöd.
Ich wollte gerne deinen Code in diese
Datei einbauen.
Und über den Combobutton "Saustritt" auf TB "Auswahl" starten, jedoch fehlen mir dann die RowSources.
Könntest du mir da helfen?
MfG Benjamin
Antwort 7 von fedjo vom 25.05.2022, 18:55 Options
Hallo Benjamin,
so ganz klar sind mir deine Angaben nicht.
Auf welchen TB stehen die gesuchten Namen Vornamen?
Auf welchen TB sollen die Namen, Vornamen eingetragen werden?
Gruß
fedjo
Antwort 8 von BenjaminM vom 26.05.2022, 10:29 Options
Hallo Fedjo,
die Datei war noch nicht gefüllt, da dies die Testdatei war, sorry.
Die Namen sollen in TB "Schueler" stehen, und in TB "Schueleraustritt" beim Löschen aus TB "Schueler" geschrieben werden.
Hier noch mal die befüllte
Datei.
MfG Benjamin
Antwort 9 von fedjo vom 26.05.2022, 18:13 Options
Hallo Benjamin,
habe in deine
Datei ein TB "Schueleraustritt" eingefügt. Nach dem Auswählen Namen, Vornamen kann die ganze Zeile in das TB "Schueleraustritt" eingetragen werden.
Die Zeile wird dadurch automatisch gelöscht und der Autofilter zurückgesetzt.
Durch das löschen der Zeile funktioniert natürlich deine Wenn Formel nicht mehr.
Gruß
fedjo
Antwort 10 von BenjaminM vom 27.05.2022, 11:31 Options
Hallo fedjo,
Danke für deine Hilfe, sieht schon gut aus.
Jedoch gibs da noch nen Problem, und zwar:
Comboboxen geben Name und Vorname aus, jedoch beim Klicken auf Eintragen Löschen... löscht und kopiert er alle Einträge mit dem Ausgewählten Vornamen in das TB "SchuelerAustritt"!
Das heißt z.B. bei Name "Becker" Vorname "Finn", löscht er mir auch gleich die Datensätze "Lindemann" und "Scheele" mit dem Vornamen "Finn" !
Kannst du da noch mal drüber schauen?
Und hättest du die Güte dir evtl. noch ein weiteres Problem in der gleichen Datei anzu schauen?
In der Userform1 geben ich Neuzugänge ein, jedoch läuft er da immer auf einen Fehler beim Übertrag vom Formular in die Tabelle "Schueler"!
und zwar hier:
Private Sub ComboBox1_Change()
Dim loZaehler As Long
Dim varBereich As Variant
Dim objWerte As Object
Dim inZeile As Integer
inZeile = ComboBox1.ListIndex + 1
Set objWerte = CreateObject("Scripting.Dictionary")
With Worksheets("Lehrer")
varBereich = Application.Transpose(.Range("B" & inZeile & ":" & .Range("B" & inZeile).End(xlToRight).Address))
End With
For loZaehler = LBound(varBereich) To UBound(varBereich)
If varBereich(loZaehler, 1) <> "" Then objWerte(varBereich(loZaehler, 1)) = 0
Next
ComboBox2.List = objWerte.keys
If ComboBox2.ListCount > 0 Then ComboBox2.ListIndex = 0
Set objWerte = Nothing
End Sub
Fehlermeldung im Debug: " Laufzeitfehler 1004, Anwendungs- oder objektdefinierter Fehler" und es wird die Zeile markiert (Fettgedruckte Zeile)
Weißt du was da falsch ist?
Vielen dank für deine Hilfe.
MfG Benjamin
Antwort 11 von fedjo vom 27.05.2022, 19:32 Options
Hallo Benjamin,
Zitat:
Comboboxen geben Name und Vorname aus, jedoch beim Klicken auf Eintragen Löschen... löscht und kopiert er alle Einträge mit dem Ausgewählten Vornamen in das TB "SchuelerAustritt"!
Sollte jetzt funktionieren.
Zu deinem zeiten Problem melde ich mich morgen wieder.
Gruß
fedjo
Datei
Antwort 12 von BenjaminM vom 28.05.2022, 13:47 Options
Super Jedjo,
Danke!
Jedoch ist mir noch was aufgefallen!
Wenn ich nun mal versehentlich auf den Commandbutton2 klicke löscht er mir alle Eintäge aus der Datenbank in TB "Schueler"!
kann man da noch ne Sicherung einbauen?
Dachte da an sowas:
Application.ScreenUpdating = False
Sheets("schueler").Select
If ComboBox1.Text = "" Then
MsgBox "Bitte Namen auswählen", , "Eingabe Prüfen"
ComboBox1.SetFocus
Exit Sub
End If
If ComboBox2.Text = "" Then
MsgBox "Bitte Vornamen auswählen", , "Eingabe Prüfen"
ComboBox2.SetFocus
Exit Sub
End If
Sheets("Auswahl").Select
Das hab ich jetzt mal in den Code für den Commadbutton3 eingebaut, die MsgBox kommt, doch bei Ok klick Überträgt er trotzdem alle Datensätze wenn nix ausgewählt wird!
Was muss ich da noch reinschreiben damit das Funtz?
Wäre nett, wenn du mir weiter helfen kannst.
Hier noch mal die aktuelle
DateiMfG Benjamin
Antwort 13 von fedjo vom 28.05.2022, 18:43 Options
Hallo Benjamin,
habe den Code in Commandbutton2 etwas geändert.
UserForm schliesen mit Unload , damit sich die Einträge in den ComboBoxen aktualiesieren können, oder gleich beim Daten übertragen, löschen aktualisieren?
Einfach mal testen.
DateiGruß
fedjo
Antwort 14 von fedjo vom 29.05.2022, 13:54 Options
Hallo Benjamin,
UserForm1 ComboBox1 von Change auf ComboBox1_Click ändern.
In UserForm2 ist keine ComboBox2 vorhanden.
Löschen: ComboBox2.List = objWerte.keys
If ComboBox2.ListCount > 0 Then ComboBox2.ListIndex = 0
Set objWerte = Nothing
Wenn in Spalte A im TB (Schüler) keine Daten vorhanden sind,
dann musst du auch die Codes für Schüler hinzufügen und Schüleraustritt angleichen.
Gruß
fedjo
Antwort 15 von BenjaminM vom 22.06.2022, 14:11 Options
Hallo @ All,
ich hab mein Problem noch immer nicht gelöst!
Fedjos Antwort hab ich nicht umsetzen können (abs nicht verstanden).
Hier noch mal ein
Bilddes Fehlers.
Kann mir dabei bitte noch aml jemand helfen und den Code abändern, so das dass Makro nicht mehr auf einen Fehler läuft?
MfG
Benjamin