Office: (Office 2016) Kundenverwaltung (Optimierung, Generelle Hilfe)

Helfe beim Thema Kundenverwaltung (Optimierung, Generelle Hilfe) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hey, ich habe eine Arbeitsmappe für Kundenverwaltung in arbeit und auch bereits größtenteils fertiggestellt und wollte das Ganze noch einmal... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Nina97, 4. Februar 2016.

  1. Nina97 Erfahrener User

    Kundenverwaltung (Optimierung, Generelle Hilfe)


    Hey,

    ich habe eine Arbeitsmappe für Kundenverwaltung in arbeit und auch bereits größtenteils fertiggestellt und wollte das Ganze noch einmal durchgeschaut bekommen, um zu sehen, was ich dort noch verbessern könnte und Ratschläge für die Umsetzung der Dinge, die noch fehlen einholen.

    Kurzer Überblick:

    Personen (bedürftig) mit mindestens einem Kind (Altersgrenze: 14J) können sich bei uns registrieren lassen und erhalten eine Kundennummer (Kunden in Anführungszeichen) plus, der Anzahl der Kinder (maximal 3) entsprechend, Taler ( 1 = 20, 2 = 40, 3 = 50) mit denen sie im Laden Spielzeug und Bekleidung "erwerben" können. Die Gültigkeit des Passes ist identisch mit der Bewilligungsfrist.

    Anbei habe ich die aktuelle Mappe (minus einiger Nebensächlichkeiten zwecks Dateigröße) angehangen.

    Hier ist auch noch einmal ein kleiner Überblick über die Arbeitsmappe.

    Was ich bis jetzt unter anderem habe:

    #Initialisierung ((Workbook_Open) vorhandene Daten werden überprüft)

    - Wenn Heute >= nächster Monatserster, dann wird die CheckBox ("Auszahlung") auf False gesetzt
    - Kinder ab 14 werden aus dem Kundenprofil entfernt
    - Taler werden durch Anzahl Kinder ermittelt
    - Passgültigkeit wird überprüft
    - Kundenstatus wird überprüft (wenn Letzter Besuch länger als 6 Monate, dann Status "Inaktiv")

    #Registrierung (frmAdd)

    - Erste verfügbare Kundennummer wird gesucht, falls nur noch wenige oder keine vorhanden, werden neue erstellt
    - Kundennummer wird direkt zugewiesen (oben links)
    - Bewilligungsfrist wird geprüft (ob Datum in der Zukunft liegt)
    - Falls "Abbrechen" geklickt wird, wird die bereits zugewiesene Kundennummer wieder verfügbar gemacht
    - Falls "Durchführen" geklickt wird, wird das Kundenprofil erstellt, die UserForm geschlossen und der neue Eintrag in der ListBox angewählt

    #Profilansicht (frmEdit)

    - Daten werden aus dem Tabellenblatt eingelesen und wiedergegeben
    - Daten sind (natürlich) bearbeitbar :p
    - Eine Checkbox um den Kundenstatus auf "Unerwünscht" zu setzen (kommt leider ab und zu vor)
    - Eine Checkbox um die Auszahlung der Taler für den aktuellen Monat zu vermerken
    - Nach dem Schließen (wenn das Profil nicht gelöscht wurde) wird der bearbeitete Eintrag in der Listbox angewählt

    Was noch fehlt:

    - Bei Anklicken der CheckBox ("Non Grata") eine Abfrage durchführen, ob der "Kunde" tatsächlich als unerwünscht deklariert werden soll, falls ja, dann sollte die TextBox "Begründung" aktiviert werden und ein Häkchen in die CheckBox kommen, falls nein, soll abgebrochen werden.

    - Die Verzeichnisse "Kindergärten & Vereine" und "Soziale Dienste & Jugendämter" müssen noch eingebaut werden. Welche Methode wäre da am besten geeignet? Eigene UserForms oder die "Haupt"-ListBox befüllen lassen? Überschriften und Spaltenanzahl müssten angepasst/verändert werden und außerdem müssen "Registrierung" und "Profilansicht" ebenfalls in veränderter Form (viel weniger Daten/Felder) dargestellt werden.

    Das mit der CheckBox ("Non Grata") habe ich bisher leider noch nicht hinbekommen und für den zweiten Punkt würde ich erst einmal gerne die bestmögliche Methode gesagt bekommen (die Arbeit werde ich natürlich selber übernehmen :p)


    Vielen Dank für das Lesen und liebe Grüße. :)
     
  2. Beverly
    Beverly Erfahrener User
    Hi,

    zur Frage der CheckBox: ich würde es so lösen:

    Code:
    Private Sub ckbNonGrata_Click()
        Dim MsgBoxNonGrata
        If ckbNonGrata Then
            MsgBoxNonGrata = MsgBox("Soll der Kundenstatus auf 'Unerwünscht' geändert werden?", vbYesNo, "Kundenstatus: Non Grata")
            If MsgBoxNonGrata = vbYes Then
                Me.txtNonGrata.Locked = False
            Else
                ckbNonGrata = False
            End If
        Else
            Me.txtNonGrata.Locked = True
        End If
    End Sub
    
    

    Was hat es mit den beiden Tabellenblättern "Kindergärten & Vereine" und "Soz.Dienste & Jugendämter" überhaut auf sich - was soll denn dort abgelegt werden und in welchem Zusammenhang stehen sie mit dem Tabellenblatt "Kunden"?

    Bis später,
    Karin
     
    Beverly, 4. Februar 2016
    #2
  3. Nina97 Erfahrener User
    Hey :)

    Also die Institutionen sind vom "Zahlungssystem" ausgeschlossen und können einfach so Spielzeug/Bekleidung abholen, stehen so gesehen in keinerlei Zusammenhang mit dem Tabellenblatt "Kunden", aber sollen aus Gründen der Übersichtlich- und Bequemlichkeit in der selben Arbeitsmappe erfasst und mit ein paar wenigen Daten geführt werden (Name, Kontaktdaten, Ansprechpartner und Letzter Besuch). Letzter Besuch ist insofern wichtig, dass ein bisschen darauf geachtet werden kann, dass eine Einrichtung nicht zu oft vorbeikommt und andere damit benachteiligt.

    Ist es für die CheckBox auch möglich, dass ebenfalls gefragt wird, wenn der Status "Non Grata" aufgelöst werden soll?
    Das scheint ja etwas komplizierter zu sein, wenn man beides haben möchte, ansonsten finde ich die Lösung super und würde ich dann auch so nutzen. Die erneute Abfrage, wenn aufgelöst werden soll ist ja nicht so wirklich wichtig.

    Vielen Dank und liebe Grüße :)
     
  4. Beverly
    Beverly Erfahrener User

    Kundenverwaltung (Optimierung, Generelle Hilfe)

    Hi,

    wenn diese beiden Tabellenblätter unabhängig von den anderen Kunden sind, würde ich auf jeden Fall ein neues UserForm verwenden - das kann jedoch für beide identisch aussehen und ich würde da nur 2 OptionButton verwenden, um je nach aktiviertem OptionButton die Daten entweder aus dem einen oder aus dem anderen zur Bearbeitung holen (bzw. in sie zu schreiben). Zur Unterscheidung könnte man noch die Hintergrundfarbe des UserForms je nach verwendetem Tabellenblatt unterschiedlich machen, so dass man auch optisch gleich sehen kann, in welchem Tabellenblatt man arbeitet.

    Bis später,
    Karin
     
    Beverly, 4. Februar 2016
    #4
  5. Beverly
    Beverly Erfahrener User
    Hi,

    die CheckBox so zu programmieren, dass Änderungen ihres Zustandes aktiv/nicht aktiv auch live wieder zurückgenommen werden können, war gar nicht so einfach, denn bei Beantwortung der Abfrage(ob der Non-Grata-Zustand geändert werden soll) mit Nein, muss die ChekBox ja in den Ausgangszustand zurückgesetzt werden, ohne dass die Abfrage noch einmal aufgerufen wird, aber ich denke, mit folgendem Code könnte es funktionieren:

    Code:
    Private Sub ckbNonGrata_Click()
        Dim MsgBoxNonGrata
        If Me.Visible = True Then
            If Me.ckbNonGrata <> Me.ckbNonGrata.Tag Then
                If Me.ckbNonGrata Then
                    MsgBoxNonGrata = MsgBox("Soll der Kundenstatus auf 'Unerwünscht' geändert werden?", vbYesNo, "Kundenstatus: Non Grata")
                Else
                    MsgBoxNonGrata = MsgBox("Soll der Kundenstatus zurückgesetzt werden?", vbYesNo, "Kundenstatus zurücksetzen")
                End If
                If MsgBoxNonGrata = vbYes Then
                    Me.txtNonGrata.Locked = Me.ckbNonGrata = False
                    If Me.ckbNonGrata = False Then Me.txtNonGrata = ""
                    Me.ckbNonGrata.Tag = Me.ckbNonGrata
                Else
                    Me.ckbNonGrata = CBool(Me.ckbNonGrata.Tag)
                End If
            End If
        End If
    End Sub
    
    Private Sub ckbNonGrata_Enter()
        Me.ckbNonGrata.Tag = Me.ckbNonGrata
    End Sub
    
    
    Bis später,
    Karin
     
    Beverly, 5. Februar 2016
    #5
  6. Nina97 Erfahrener User
    Huhu :)

    Ich hatte schon ein paar Mal versucht, dass mit der CheckBox zu ergooglen, aber andere hatten da wohl auch ihre Probleme mit und dein Code funktioniert super! :)

    Vielen Dank dafür, das ist großartig!

    Wenn ich die Idee für das andere Thema richtig verstanden habe, dann soll ich das jetzige "Verzeichnis"-DropDownMenü (oben rechts) durch eine Schaltfläche ("Institutionen") ersetzen und darüber auf ein zweites, identisch aussehendes UserForm wechseln lassen, dessen ListBox ich je nach Optionbutton-Auswahl ("Kindergärten" oder "Soziale Dienste") mit den entsprechenden Daten fülle?

    Also insgesamt 2 UserForms (die "kleinen" UserForms wie Sicherungskopie, Registrierung, Profilansicht, etc. außen vor) oder meinst du insgesamt 3 UserForms, also für Kunden, Kindergärten und Soziale Dienste jeweils ein eigenständiges?

    Und ist die Arbeitsmappe bisher code-technisch gesehen einigermaßen passabel umgesetzt? Ich habe versucht alles möglichst so hinzubekommen, wie du es mir für die anderen Arbeitsmappen verbessert, bzw. überhaupt gezeigt hast.

    Liebe Grüße und einen schönen Abend! :)
     
  7. Beverly
    Beverly Erfahrener User
    Hi,

    ich war auch schon kurz davor, meinen Rechner aus dem Fenster zu werfen... :p


    Ich würde genau so vorgehen wie du beschrieben hast: auf dem UserForm frmMain oben rechts einen Schalter zum Wechsel auf die Insitutionen. Für die Insitutionen benutzt du ein 2. UserForm, weil die Daten ja identsich sind, die erfasst werden sollen, nur dass sie auf unterschiedlichen Tabellenblätter abgelegt werde. Und über 2 OptionButton (z.B.) unterschiedest du dann, welches von den beiden Tabellenblättern bearbeitet wird.

    Was den Code in deiner Mappe betrifft: ich habe mir selbstverständlich nicht alle deine Makros/Prozeduren angeschaut, denn dazu ist das Projekt zu umfangreich. Sieh es aber mal so:

    1. hat jeder einen anderen Programmierstil und jeder würde an so ein Projekt anders herangehen, weshalb die Realisierung letztendlich bei jedem anders aussehen würde
    2. gibt es an jedem Projekt irgendetwas zu verbessern (da schließe ich meine eigenen nicht aus)

    Hauptsache ist jedoch: du kannst mit deinem Projekt (so wie es jetzt ist) alles realisieren was du dir als Ziel gesteckt hast und es läuft stabil - was will man mehr? :)

    Bis später,
    Karin
     
    Beverly, 5. Februar 2016
    #7
  8. Nina97 Erfahrener User

    Kundenverwaltung (Optimierung, Generelle Hilfe)

    Hey :)

    Das wäre aber ein großer Verlust für die Excel-Welt gewesen! :)

    Mit der ersten Lösung hätte ich mich auch anfreunden können, aber so wie es jetzt ist, ist es natürlich echt cremig zart! :p

    Die Idee für die Institutionen war super und ich habe es jetzt sogar relativ zügig genau so umgesetzt bekommen!

    Und ich konnte auch sehr gut intSpalte aus deiner Suchen/Sortierung-Verbesserung gebrauchen um die jeweils relevanten Spalten für die KdNr/Verfügbarkeit anzusprechen.

    Code:
        If frmMain2.optInst1 Then
            Tabellenblatt = "Kindergärten & Vereine"
            intSpalte1 = 3
            intSpalte2 = 4
        ElseIf frmMain2.optInst2 Then
            Tabellenblatt = "Soz.Dienste & Jugendämter"
            intSpalte1 = 5
            intSpalte2 = 6
        End If
    
    Etwas mehr Zeit hat es mich dann gekostet, dass die Nummern für die zwei Kategorien "02 xxx" und "03 xxx" sein sollen, aber jetzt scheint alles erstmal zu funktionieren. Das ist ein gutes Gefühl :)

    Und gerade habe ich auch noch etwa 10min gebraucht um zu erkennen, dass ich lngLetzte anstatt lngZeile für das bearbeiten der Einträge benutzt habe :p

    Aber ich bin auch schon echt müde! Morgen gucke ich dann weiter.

    Nochmals vielen Dank für deine tolle Hilfe, gute Nacht und liebe Grüße :)
     
  9. Beverly
    Beverly Erfahrener User
    Hi,

    wenn du nur 2 OptionButton hast reicht es, mit If...Else...End If zu arbeiten und musst nicht If...ElseIf...End If verwenden, denn es gibt ja nur 2 Möglichkeiten zur Unterscheidung.

    Bis später,
    Karin
     
    Beverly, 6. Februar 2016
    #9
  10. Nina97 Erfahrener User
    Hey :)

    Ich hab's jetzt eben abgeändert, dankeschön!

    Gestern habe ich leider nichts schaffen können, weil ich Kopfschmerzen hatte, aber so allmählich sind die 3 Arbeitsmappen dann ja auch echt mal langsam fertig :)

    Schönen Sonntag noch und liebe Grüße. :)
     
  11. Nina97 Erfahrener User
    Hey :)

    Die Arbeitsmappe wurde jetzt schon mit reichlich Daten gefüttert und alles funktioniert super! :)

    Es gibt jetzt nur noch eine Sache, die mich etwas stört, und zwar, dass, wenn man eine gefilterte Auswahl durch die UserForm-Suche erhalten hat und dann dort einen Eintrag (Kundenprofil) bearbeitet, die ListBox wieder ungefiltert/vollständig mit den Tabellenblattdaten gefüllt wird.

    Also, wenn man beispielweise als Suchtext "Bereit" und als Suchkategorie "Status (Pass)" eingibt, gibt es z.B. 100 Treffer.
    Bearbeitet man dann dort einen der Einträge, wird wieder der gesamte Tabellenblattinhalt eingelesen und das "erschwert" das Arbeiten ein kleines bisschen.

    Also muss es wohl im frmEdit-Code (Profil bearbeiten) noch eine Abfrage vor der ListBox-Aktualisierung geben, ob gesucht wurde und wenn ja, nach welchen beiden Kriterien (Text und Kategorie) - so viel habe ich, denke ich mal, schon verstanden :p

    Wie ich das so wirklich realisieren könnte, weiß ich aber leider nicht genau. Ich würde da jetzt erst einmal an einige Public Variablen denken um die zwei Suchkriterien und ob überhaupt gesucht wurde zu übermitteln (blnFilter, strWert1, strWert2 ?) und dann am Ende der frmEdit die Suchen-Sub callen und dann dort die Werte wieder entgegennehmen??

    Naja, ich werde es jetzt auf jeden Fall versuchen, ob ich es überhaupt irgendwie hinbekomme, aber ich wollte schon einmal fragen, ob du da vielleicht eine Lösung oder einen Ratschlag für im Kopf hättest, weil ich glaube, dass das ziemlich schwierig für mich wird.

    Leider musste ich mehr als die Hälfte der Datei löschen, damit ich unter 100kb komme, aber ich habe sie trotzdem noch einmal angehangen.

    Ich versuch dann jetzt mein Bestes derweil :)

    Liebe Grüße :)
     
  12. Beverly
    Beverly Erfahrener User
    Hi,

    wenn ich mich richtig erinnere, hatten wir so etwas im UserForm für die Kunden bereits realisiert: wenn die Kategorie (nach der gefiltert war) geändert wurde, wurde der Datensatz aus der ListBox gelöscht, falls etwas anderes geändert wurde verblieb der Datensatz in der ListBox.
    So richtig kann ich in der jetzigen Mappe allerdings nichts nachvollziehen, da nur ein einziger Eintrag vorhanden ist - da müssten schon mindestens 5 oder 10 vorhanden sein, denn sonst kann ja keine gefilterte Liste erstellt werden.

    Bis später,
    Karin
     
  13. Nina97 Erfahrener User

    Kundenverwaltung (Optimierung, Generelle Hilfe)

    Hey :)

    Ja, daran musste ich auch direkt denken, das kommt mir aber so super kompliziert vor, dass ich mich da nicht rangetraut habe.

    Und dort spielt es sich auch innerhalb der selben UserForm ab, während es hier zwischen 2 hin und hergeht (obwohl das bei Tags ja dann eigentlich auch egal ist oder?) - ich meinte auch gerade eigentlich Globale Variablen und nicht Public Kundenverwaltung (Optimierung, Generelle Hilfe) :eek:

    Wenn ich überhaupt erst einmal irgendeine Lösung habe, die funktioniert, dann habe ich auch die nötige Ruhe, um andere Wege auszuprobieren, sonst bin ich da so hibbelig :p

    Ich glaube, ich bin sogar schon ganz nah an einer ersten Lösung dran.

    Ich habe im ModulInit jetzt 4 Variablen

    Code:
    Global blnFilter As Boolean
    Global strWert1 As String
    Global strWert2 As String
    Global intListIndex As Integer
    Sobald gesucht wird (searchButton_Click in frmMain) werden strWert1 und strWert2 mit den Kriterien gefüllt und blnFilter auf True gesetzt. Dann gibt es im frmEdit (editButton_Click) die Abfrage für blnFilter.

    Code:
    If blnFilter Then
        frmMain.searchButton = True
    Else
         'ListBox "KdBox" aktualisieren
          lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)
                    frmMain.KdBox.List = Range(Cells(3, 1), Cells(lngLetzte, 8)).Value
    End If
    Dann habe ich im Grunde die selbe Abfrage noch einmal in searchButton_Click - und um aus dem "Kreis" auszubrechen muss man dann den "Reload"-Button (frmMain) klicken, um blnFilter wieder auf False zu bekommen. :)

    Jetzt fehlt mir nur noch, dass der richtige ListIndex wieder angewählt wird, während blnFilter auf True ist - bei blnFilter = False funktioniert es ja schon. :)

    Ich werde der Mappe dann gleich auch noch mehr fiktive Personen hinzufügen und sie dann noch einmal hochladen!

    Dankeschön nochmals und liebe Grüße :)
     
    Zuletzt bearbeitet: 10. Februar 2016
  14. Nina97 Erfahrener User
    Huhu nochmals :)

    Also ich habe der Tabelle nun einige Einträge hinzugefügt (100kb Rahmen) und zwei Versionen der Mappe; einmal WIP1.1 im "ursprünglichen" Zustand und WIP1.2 mit der jetzigen/vorläufigen Lösung. Es funktioniert dort anscheinend auch so, wie ich es mir wünsche, allerdings wahrscheinlich über den steinigen Pfad :p

    Ob's wirklich überhaupt fehlerfrei läuft, muss ich morgen dann testen.

    Von den Änderungen (WIP1.2) betroffen sind:

    #Module
    ModulInit

    #UserForms
    frmMain (reloadButton_Click, searchButton_Click)
    frmEdit (editButton_Click, exitButton_Click)

    Liebe Grüße und gute Nacht :)
     
  15. Beverly
    Beverly Erfahrener User
    Hi,

    wenn es funktioniert, dann ist es doch Ok - es gibt bekanntlich viele Wege, die nach Rom führen. :D

    Bis später,
    Karin
     
Thema:

Kundenverwaltung (Optimierung, Generelle Hilfe)

Die Seite wird geladen...
  1. Kundenverwaltung (Optimierung, Generelle Hilfe) - Similar Threads - Kundenverwaltung Optimierung Generelle

  2. Formel Optimierung

    in Microsoft Excel Hilfe
    Formel Optimierung: Hallo ihr lieben Wissenden, ich habe ein, ich glaube etwas umständliches Formelkonstrukt, welches eigentlich auch macht was es soll. Aber ich frage mich ob das nicht irgendwie einfacher geht. Ich...
  3. Optimierung Formel wenn, zählenwenn, Index

    in Microsoft Excel Hilfe
    Optimierung Formel wenn, zählenwenn, Index: Hallo, ich habe mein letzten Beitrag gelöst. Allerdings möchte ich die Formel nun erweitern. Ich hatte nach einer Formel gesucht, die mir zu einem Suchkriterium in meiner Tabelle ein passendes...
  4. Verwenden von benutzerdefinierten Tools zur Optimierung von Finanzprozessen

    in Microsoft Excel Tutorials
    Verwenden von benutzerdefinierten Tools zur Optimierung von Finanzprozessen: Verwenden von benutzerdefinierten Tools zur Optimierung von Finanzprozessen Excel für Microsoft 365 Excel 2019 Power BI Mehr... Weniger...
  5. Tourenplanung und -optimierung

    in Microsoft Excel Hilfe
    Tourenplanung und -optimierung: Hallo Zusammen! Ich habe mal so eine grundsätzliche Frage.. Ist eine Tourenplanung bzw. -optimierung nur mit Excel/VBA überhaupt möglich? Ich suche ein Thema für meine Abschlussarbeit und es hat...
  6. Hilfe bei Optimierung einer Coronadatenbank

    in Microsoft Access Hilfe
    Hilfe bei Optimierung einer Coronadatenbank: Hallo zusammen! Ich hoffe auf eure Hilfe bei folgender Problemstellung: Eine Access Datenbank wurde erstellt, um COVID-19 Infizierte, Verdachtsfälle und einfache Kontaktpersonen anlegen und...
  7. Optimierung Datenbank

    in Microsoft Access Hilfe
    Optimierung Datenbank: Hallo zusammen Ich habe vor etwa einem Jahr eine Datenbank für einen Teil unserer Produkte erstellt. Das hat nach einigen Startschwierigkeiten dann auch gut funktioniert. Mit dem Gebrauch der...
  8. Kundenverwaltung mit Terminplanung gesucht

    in Microsoft Access Hilfe
    Kundenverwaltung mit Terminplanung gesucht: Hallo Leute, Bin auf der suche nach einer Kundenverwaltung mit Terminplanung, hat vielleicht wer schon soetwas und könnte mir diese vielleicht als beispiel zusenden ? Bin derzeit auch dabei mir...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden