Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Datenbank mit Eingabefenster


Betrifft: Datenbank mit Eingabefenster von: Markus
Geschrieben am: 27.09.2019 09:12:42

Hallo zusammen,

ich bin dabei mir eine Datenbank aufzubauen und möchte das Suchfenster, bzw. die Funktion darin erweitern.
Und zwar möchte ich, dass der wenn ich in dem Feld gefunden einen Treffer habe und ich diesen doppelklicke sich das Formular "UserForm1_Eingabefenster" öffnet, die Daten der gefundenen Zeile lädt und in dem Fenster anzeigt.
Außerdem sollen dann wenn Änderungen vorgenommen werden diese dann in der jeweiligen Zeile gespeichert werden.

Ich hoffe, ihr könnt mir dabei helfen. Bei Fragen einfach fragen :-)

Hier die Datei:
https://www.herber.de/bbs/user/132228.xls

VG
Markus

  

Betrifft: AW: Datenbank mit Eingabefenster von: Oberschlumpf
Geschrieben am: 27.09.2019 10:32:01

Hi Markus,

versuch mal:
https://www.herber.de/bbs/user/132230.xls

Klick auf den Button "Suchen" und such nach einem vorhandenen Datensatz.

Nun klick in der Listbox doppelt auf einen der Treffer
...das Userform "Eingabefenster" wird angezeigt, und die Controls erhalten die Werte aus der zuvor doppelt angeklickten Listbox

Ändere nun einen beliebigen Eintrag im Eingabefenster, klick auf "Speichern" und schau dir die Tabelle "Aufgaben" an.

Die von dir geänderten Daten wurden in der Tabelle in der richtigen Zeile übernommen.

Hilfts?

Ciao
Thorsten


  

Betrifft: Vorschlag zur ListBox... von: Matthias L
Geschrieben am: 27.09.2019 10:34:13

Hallo

Vorschlag:

Ergänze Deine Listbox um eine Spalte.
Entsprechend ColumnCount um 1 erhöhen!

ListBox1.List(ListBox1.ListCount - 1, 5) = Range(rngSearch.Address).Row

In Diese schreibst Du die Zeile des Fundes Deiner Suche.

Nun kannst Du gezielt aus der Tabelle "Aufgaben" die Daten für Deine 2.UserForm holen.




  

Betrifft: von mir ein anderer Weg von: Werner
Geschrieben am: 27.09.2019 10:40:38

Hallo Markus,

indem du deine Listbox1 im Userform_suchen um eine Spalte erweiterst. Im Eigenschaftenfenster ColumnCount auf 6 stellen.

In diese zusätzliche Spalte nimmst du einfach beim Suchen die Zeilennummer des jeweiligen Treffers mit auf.

Unter ColumnWidth stellst du dann die Breite deiner Spalten der Listbox ein. Hierbei stellst du die Breite der letzten Spalte (=Spalte 5) auf 0 ein. Damit werden dir die Einträge in der Listbox nicht angezeigt.

ColumnWidth 60 Pt;60 Pt;60 Pt;60 Pt;60 Pt;60 Pt;10 Pt
Die Spaltenbreite mußt du an deine Bedürfnisse anpassen. Ich hab jetzt mal die letzte Spalte auf 10 eingestellt, damit du die Einträge siehst. Wie schon gesagt, die dann auf 0 einstellen.

Jetzt kannst du dann beim "Zurückschreiben" von geänderten Daten über die Spalte 6 der Listbox auf die jeweilige Zeilennummer des Datensatzes zugreifen.

Code für die Userform_suchen:

Option Explicit

Private Sub cmdClose_Click()
Unload Me
End Sub

Private Sub cmdSearch_Click()
Dim objSH As Worksheet
Dim rngSearch As Range
Dim strFirst As String

If txtSearch <> "" Then
    ListBox1.Clear
    Set objSH = Sheets("Aufgaben")
    With objSH
        Set rngSearch = .Range("A:E").Find(What:=txtSearch, LookIn:=xlValues, _
        LookAt:=IIf(chkPart, xlWhole, xlPart), MatchCase:=IIf(chkCase, True, False))
        If Not rngSearch Is Nothing Then
            strFirst = rngSearch.Address
            Do
                ListBox1.AddItem .Cells(rngSearch.Row, 1)
                ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(rngSearch.Row, 2)
                ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(rngSearch.Row, 3)
                ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(rngSearch.Row, 4)
                ListBox1.List(ListBox1.ListCount - 1, 4) = .Cells(rngSearch.Row, 5)
                'Aufnahme der Fundzeile in Spalte 6 der Listbox
                ListBox1.List(ListBox1.ListCount - 1, 5) = rngSearch.Row
            
                Set rngSearch = .Range("A:D").FindNext(rngSearch)
            Loop While Not rngSearch Is Nothing And rngSearch.Address <> strFirst
        Else
            ListBox1.AddItem "Kein Treffer!"
        End If
    End With
End If

End Sub

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Me.Hide
UserForm1_Eingabefenster.Show
End Sub
Code für die Userform_Eingabefenster:
Option Explicit

Private Sub CommandButton1Speichern_Click()
With UserForm_suchen.ListBox1
    'in Listbox1.List(.Listbox1.Listindex, 5) steht die Zeile
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 1) = Me.ComboBox1_Name
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 2) = Me.ComboBox2_Taetigkeit
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 3) = Me.TextBox3Zusatzinformation
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 4) = CDate(Me.TextBox4erhaltenam)
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5) = Me.TextBox5Kommentar
    'einlesen des Kommentar aus der Tabelle Aufgaben
    Me.TextBox5Kommentar = Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5)
End With
    
Unload Me
UserForm_suchen.Show
   
End Sub

Private Sub CommandButton2Schliessen_Click()
Unload Me
UserForm_suchen.Show
End Sub

Private Sub TextBox5erledigtam_Change()
UserForm1_Eingabefenster.TextBox5erledigtam = Date
End Sub

Private Sub UserForm_Activate()
With UserForm_suchen
    Me.ComboBox1_Name = .ListBox1.List(.ListBox1.ListIndex, 0)
    Me.ComboBox2_Taetigkeit = .ListBox1.List(.ListBox1.ListIndex, 1)
    Me.TextBox3Zusatzinformation = .ListBox1.List(.ListBox1.ListIndex, 2)
    Me.TextBox4erhaltenam = .ListBox1.List(.ListBox1.ListIndex, 3)
End With
End Sub
Das Makro reagiert auf Doppelklick in der Listbox1.
Kann im Moment leider nichts hochladen.

Gruß Werner


  

Betrifft: Matthias + Werner von: Oberschlumpf
Geschrieben am: 27.09.2019 10:48:48

Hallo,

eure Idee ist einfach geiler :-)
So spart man sich das erneute Suchen in der Tabelle nach der richtigen Zeile; so wie es in meinem Vorschlag gemacht wird.

Ciao
Thorsten


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 10:58:51

Vielen Dank für die schnelle Hilfe!

Werner Deine Lösung verstehe ich leider nicht ganz, schade dass Du gerade nichts hoch laden kannst.
Könntest Du mir vielleicht sobald es wieder geht eine Beispieldatei hochladen?

Thorsten, Deine Lösung ist auch gut :-) Vielen Dank dafür!!!

Viele Grüße,
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 11:05:25

Hallo Markus,

was gibt es da groß zu verstehen.

Die beiden Codes in das Codemodul der jeweiligen Userform kopieren -deinen dort vorhandenen Code natürlich vorher löschen.

Im Userform_suche bei Listbox1 ColumnCount von 5 auf 6 erhöhen und die Spaltenbreiten bei ColumnWidth eintragen.

Das wars doch schon.

Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 11:16:24

Hallo Werner,

habe verstanden was Du meinst.
Ich habe die Codes eingefügt aber beim Speichern kommt eine Fehlermeldung....
Kannst Du mal versuchen, ob es bei Dir funktioniert?

https://www.herber.de/bbs/user/132232.xls

VG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 11:26:44

Hallo Markus,

schau dir mal dein "Datum" in D5 an - fällt dir was auf?

Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 11:49:20

Hallo Werner,

ja das liegt in der Vergangenheit, aber was hat das damit zu tun, dass ich nichts speichern kann?

VG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 11:53:03

Hallo Markus,

gibt es bei dir im Kalender den 31.02., bei mir nämlich nicht.

Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 11:58:37

Hallo Werner,

ich habe sicherheitshalber nachgesehen, bei mir gibt es den auch nicht :-) :-)
Aber an dem liegt es ja nicht, dass es bei mir nicht funktioniert.....

VG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 12:08:28

Hallo Markus,

sondern?

Mit deiner nochmal hochgeladenen Mappe bringt er mit einen Typenkonflikt wenn ich versuche den Datensatz mit dem "Datum" vom 31.02.2017 zu speichern. Was ja auch logisch ist, weil das nun mal kein gültiges Datum ist.

Hast du denn mal ein gültiges Datum eingetragen und es noch mal versucht?

Bei mir macht er nämlich genau das was er machen soll.

Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 12:03:51

Hallo Markus,

ersetz mal den Code vom Speichern Button mit dem hier:

Private Sub CommandButton1Speichern_Click()
With UserForm_suchen.ListBox1
    'in Listbox1.List(.Listbox1.Listindex, 5) steht die Zeile
    If Me.TextBox4erhaltenam <> "" Then
        If IsNumeric(Me.TextBox4erhaltenam) Then
            If IsDate(Me.TextBox4erhaltenam) Then
                Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 4) = CDate(Me. _
TextBox4erhaltenam)
            Else
                MsgBox "Wert ist kein gültiges Datum"
                Me.TextBox4erhaltenam.SetFocus
                Exit Sub
            End If
        End If
    End If
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 1) = Me.ComboBox1_Name
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 2) = Me.ComboBox2_Taetigkeit
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 3) = Me.TextBox3Zusatzinformation
    Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5) = Me.TextBox5Kommentar
    'einlesen des Kommentar aus der Tabelle Aufgaben
    Me.TextBox5Kommentar = Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 5)
End With
    
Unload Me
UserForm_suchen.Show
   
End Sub
Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 12:50:24

Hallo Werner,

ich habe das Datum angepasst und den Code wie Du geschrieben hast geändert.
Beim speichern bringt er mir dann einen Fehler:

Worksheets("Aufgaben").Cells(.List(.ListIndex, 5), 4) = CDate(Me. _
TextBox4erhaltenam)

wird gelb markiert.....

VG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 13:12:19

Hallo,

dann lad mal genau die Datei hoch.


Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 13:14:47

Hallo,

hier bitteschön.

https://www.herber.de/bbs/user/132243.xls

BVG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 27.09.2019 13:56:56

Hallo,

das Makro hast du mitnichten geändert.

Dann hast du da eine Spalte "erhalten am" in der ich ein Datum erwarten würde.
Warum steht dann in deinem letzten Datensatz in dieser Spalte ein Text?

https://www.herber.de/bbs/user/132245.xls

Gruß Werner


  

Betrifft: AW: Matthias + Werner von: Markus
Geschrieben am: 27.09.2019 14:08:00

Hallo,

also das Datum habe ich jetzt richtig eingetragen statt dem Text.
Wenn das Suchfenster die Userform öffnet füllt es alle Felder aus bis auf das letzte Feld "Bemerkungen".
Und der Fehler den ich beschrieben habe beim speichern der kommt wenn ich nicht über suchen gehe, sondern wenn ich die Userform über Eingabe gehe, dort Daten eintrage und speichern möchte.
Geht das bei Dir denn?

https://www.herber.de/bbs/user/132246.xls

VG
Markus


  

Betrifft: AW: Matthias + Werner von: Werner
Geschrieben am: 28.09.2019 16:49:14

Hallo Markus,

mal ein paar Anmerkungen am Rande:

Entweder hast du dir den Code von mir überhaupt nicht angesehen, oder du verstehst nicht was da passiert.
Ansonsten hättest du die Codezeile für das Übernehmen der Bemerkungen (die ich vergessen hatte) anhand des restlichen Codes selbst ergänzen können.

Dann hast du im Eingangsbeitrag von Problemen bezüglich der "Suchen" Userform / Übergabe der Daten in die zweite Userform und anschließendem Abspeichern geschrieben.

Danach hatte ich geschaut und dir eine Lösung angeboten. Dann schreibst du ständig, dass es nicht funktioniert und du Fehlermeldungen bekommst.

Dabei teilst du dann aber erst nach mehrmaligem hin und her schreiben mit, dass wir uns zwischenzeitlich auf einer ganz anderen Baustelle befinden. Mit ein paar mehr Infos von Anfang an, hätte man sich das sparen können.

Zudem zeigt sich hier auch wieder, dass du den Code nicht verstanden hast. Beim Einstieg über die "Suchen" Maske wird die entsprechende Zeilennummer in die Listbox mit aufgenommen. Beim Weiterarbeiten über die zweite Maske werden die Daten in die entsprechende Zeile, die aus der letzten Spalte der "Suchen" Maske bezogen wird, geschrieben.

Beim direkten Einstieg über die zweite Maske wird aber die "Suchen" Maske gar nicht aufgerufen, es ist also keine Zeile bekannt, weil diese ja nur dann vorhanden ist, wenn vorher gesucht wurde, was hier ja nicht der Fall ist.
Beim Speichern greifst du aber genau auf diesen Code zu. Das Programm kann ja gar nicht wissen wohin gespeichert werden soll (Zeile), weil die Zeile ja zuvor nicht aus der "Suchen" Maske zu verfügung steht.

Wie ich das sehe willst du einerseits vorhandene Datensätze ändern, über die "Suchen" Maske. Andererseits willst du komplett neue Datensätze direkt über die zweite Maske neu erfassen.

Schau dir mal deine Beispielmappe an.

https://www.herber.de/bbs/user/132268.xls

Gruß Werner


  

Betrifft: für eine Rückmeldung reichts wohl nicht. o.w.T. von: Werner
Geschrieben am: 02.10.2019 20:45:33




  

Betrifft: AW: für eine Rückmeldung reichts wohl nicht. o.w.T. von: Markus
Geschrieben am: 07.10.2019 10:51:17

Hallo Werner,

vielen Dank für Deine Hilfe.
Ich habe diese erst jetzt gelesen und hätte zwar noch Fragen,
aber wie Du mich hier angehst lasse ich das besser, denn das finde ich nicht in Ordnung.
Trotzdem noch einmal Danke.

VG
Markus


  

Betrifft: Vielen Dank fürs Ignorieren meiner AW ... owT von: Matthias L
Geschrieben am: 27.09.2019 23:42:29




  

Betrifft: AW: Datenbank mit Eingabefenster von: Markus
Geschrieben am: 27.09.2019 11:04:13

Hallo Thorsten,

ich habe Deine Variante gerade getestet, wenn ich dann in einem Feld etwas ändere, dann schreibt es eine komplett neue Zeile. Ich möchte aber gerne, dass dieser Wert in der bestehenden Zeile überschrieben wird. Ist das möglich?

VG
Markus


  

Betrifft: AW: Datenbank mit Eingabefenster von: Oberschlumpf
Geschrieben am: 27.09.2019 11:18:49

Hi Markus,

wenn ich an meinem PC deine Bsp-Datei mit meinem VBA-Code starte, passiert das:

Schritt 1


Schritt 2


Schritt 3


Schritt 4


Ich kann also (noch) keinen Fehler entdecken.

Ich habe diese Datei zur Verfügung gestellt:
https://www.herber.de/bbs/user/132230.xls

Ciao
Thorsten


  

Betrifft: AW: Datenbank mit Eingabefenster von: Markus
Geschrieben am: 27.09.2019 11:41:46

Hallo Thorsten,

wenn ich dann im Suchfenster die gefundene Zeile doppelklicke, dann öffnet es das Fenster, befüllt die Felder, aber das Fenster mit dem Kommentar nicht, das bleibt leer.....
Das habe ich gerade mit Deiner Datei versucht.

VG
Markus


Beiträge aus dem Excel-Forum zum Thema "Datenbank mit Eingabefenster"