Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Anfängerprojekt überarbeiten - für bessere Wege

Forumthread: Anfängerprojekt überarbeiten - für bessere Wege

Anfängerprojekt überarbeiten - für bessere Wege
04.11.2024 15:41:51
DerChris
Hallo Zusammen,

ich bin noch am Anfang was VBA angeht, habe aber hier ein Projekt das inzwischen sehr groß geworden ist.
Ich habe alles zusammen "gebastelt" indem ich für jedes Vorhaben oder Problem eine Lösung gesucht habe.
Mir ist aber bewusst das es an den meisten Stellen wahrscheinlich bessere und effektivere Wege gibt.

Was mir nun in meiner Lernphase unheimlich helfen würde, wäre wenn ein Profi mal drüber geht und die Sachen entsprechend "umbaut".
Dann kann ich mir die bessere Vorgehensweise im Vergleich anschauen und lernen wie ich es beim nächsten Mal besser machen kann.

Ich hoffe jemand hat die Lust sich das mal rein zuziehen.

Kurze Erklärung zum Projekt:

Mitarbeiter und Vorgesetzte beurteilen die Leistung des Mitarbeiters und die Daten werden in die Userform eingetragen.
Es gibt Möglichkeiten neue Mitarbeiter anzulegen und zu löschen, die Liste wird sortiert und die Textboxen entsprechend gefüllt.
Das ganze wird Jahresweise abgespeichert und aus den Bewertungen ergibt sich ein Bonus.

Das ganze geht dann noch in eine Präsentation, aber das kann man weg lassen.

Ich muß gestehen, um so größer das Projekt wurde um so schwieriger war es für mich bessere Wege zu finden.

Es geht schon los das meine Listbox im initialize gefüllt wird (ist glaube ich suboptimal) und dann die vielen OptionButtons, oh Gott.

Wie gesagt wäre schön wenn jemand Lust hat. Funktionieren tut alles "irgendwie" :-)

https://www.herber.de/bbs/user/173383.xlsm

LG Chris
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
04.11.2024 16:13:33
daniel
Hi
Grundsätzlich sollte man im Initzialize-Event nur diejenigen Steuerlementeigenschaften setzen, die variabel sind und aktuell berechnet werden müssen.
alles, was fest ist, sollte man schon direkt im Editor eintragen.
Bei Listboxen erfordert das, dass die Inhalte in einer Tabelle in einem Zellbereich hinterlegt sind und man die Adresse (oder, falls vorhanden, den Namen) dieses Zellbereichs dann in der Eigenschaft RowSource einträgt.

Optionbutton-Orgien kann man vermeiden, wenn man eine Optionbuttongruppe durch List- oder Comboboxen ersetzt.
dafür müsstest du dich aber von aktuellen Anordnung der Elemente lösen und das anders gestalten (ist schwierig, wenn man von der Papierform kommt)
wenn du bei Optionbuttons bleiben willst, solltest du eine systematische Benennung einführen, damit du die Übersicht im Code behälst
"OptionButton1" würde ich als "OB_Pünktlichkeit_3m" benennen.

desweiteren, du hast viele Eingabeschritte, die gleich sind (Pünktlichkeit - Arbeitstempo).
hier könnte man nur einen einzigen Fall erstellen und man muss dann über eine Registerkarte oder eine Combobox einstellen, welche man gerade bewerten will.
hat natürlich den Nachteil, dass man nicht mehr alles auf einen Blick sieht, aber es reduziert deine Steuerlementanzahl für diese Eingabe von 135 auf 16 bzw auch nur 4, wenn du Listboxen für die Beurteilung verwendest. Dafür brauchst du dann aber eine zwischenpeicherung der Eingabe im Hintergrund, weil du dafür nicht mehr die Eingabe nutzen kannst.

das würde mir so auf den ersten Blick einfallen.

man merkt Excel halt an, dass die möglichkeiten eine GUI zu erstellen mittlerweile mehrere Jahrzehnte alt sind.

Gruß Daniel
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
04.11.2024 18:33:59
Yal
Moin Chris,

ein sauberes Einrücken ist das A&O der Lesbarkeit.
Aus:
Private Sub Admin2_Click() 'Ausblenden: PDF1_save,NeuerDatensatz,neuesJahrButton, Loeschen


With Admin2
If .Value Then
pdf1_save.Visible = True
NeuerDatensatz.Visible = True
neuesJahrButton.Visible = True
Loeschen.Visible = True
LockAll.Visible = True
Else
pdf1_save.Visible = False
NeuerDatensatz.Visible = False
neuesJahrButton.Visible = False
Loeschen.Visible = False
LockAll.Visible = False
End If
End With
End Sub

wird
Private Sub Admin2_Click() 'Ausblenden: PDF1_save,NeuerDatensatz,neuesJahrButton, Loeschen


With Admin2
If .Value Then
pdf1_save.Visible = True
NeuerDatensatz.Visible = True
neuesJahrButton.Visible = True
Loeschen.Visible = True
LockAll.Visible = True
Else
pdf1_save.Visible = False
NeuerDatensatz.Visible = False
neuesJahrButton.Visible = False
Loeschen.Visible = False
LockAll.Visible = False
End If
End With
End Sub

leichter/logischer zu erfassen, oder?

Zweite Schritt: da ".Value" ein Boolean ist, und in jedem Block nur True oder False vorkommt:
Private Sub Admin2_Click() 'Ausblenden: PDF1_save,NeuerDatensatz,neuesJahrButton, Loeschen


With Admin2
pdf1_save.Visible = .Value
NeuerDatensatz.Visible = .Value
neuesJahrButton.Visible = .Value
Loeschen.Visible = .Value
LockAll.Visible = .Value
End With
End Sub


Dito:
Private Sub LockAll_Click() 'Ausblenden: PDF1_save,NeuerDatensatz,neuesJahrButton, Loeschen

Dim i, j, k, l As Integer

With LockAll
For i = 1 To 132
Me("OptionButton" & i).Locked = Not .Value
Next i
For j = 1 To 13
Me("kom" & j).Locked = Not .Value
Next j

MaxBonus.Locked = .Value
MAName.Locked = .Value
arbeitetals.Locked = .Value
arbeitetseit.Locked = .Value
Krank.Locked = .Value
End With
End Sub


Schwierigere Übung: Muster erkennen und Modularisieren:
Private Sub arbeitetals_Change()    'Auswahl MA-Funktion (aktiviert entsprechendes Optionsfeld)

Dim E

'Zustand-abhängig setzen
For Each E In Split("127_Wareneingang 128_Kommissionierung 129_Packen 130_Heimnarbeit 131_Versand 132_Leitstand")
E = Split(E, "_")
Me.Controls("OptionButton" & E(1)) = CBool(InStr(1, arbeitetals.Value, E(2)))
Next
End Sub


VG
Yal
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
05.11.2024 10:12:48
Alwin Weisangler
Hallo Chris,
ich habe dein Initialize umgebaut. Damit im Zusammenhang wird verhindert, dass das Userform mehrfach initialisiert wird. Dann habe ich die Textboxen + Combobox in ein Array gepackt um, wo es sich eignet diese in einer Schleife abzuarbeiten.
Dies soll nur als Vorlage für dein weiteres vereinfachen dienen.
Grundsätzlich würde ich hier anders vorgehen.
Es beginnt eigentlich schon in den Tabellenblättern. Die spalten so anlegen, dass ein Abarbeiten in Schleifen möglich ist.
Die Eintragungen (WAHR/FALSCH) für die Checkboxen würde ich ans Ende verlegen.
Aber schau erst mal rein.
Schon mit den paar wenigen Veränderungen sind es über 100 Codezeilen weniger.
https://www.herber.de/bbs/user/173396.xlsm

Gruß Uwe
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
05.11.2024 13:19:05
DerChris
Vielen Dank schon mal an alle die bis jetzt geantwortet haben.

Ich versuche jetzt mal deine Änderungen zu verstehen und nachzuvollziehen. Das mit den Arrays habe ich noch nicht so drauf.
z.B. wofür ist das genau?
Static sblnInitialize As Boolean


und hier ist wohl der Zugriff aufs Array, aber wie funktioniert der? Kannst du das vielleicht kurz erklären?

With ArbeitetAls    ' Combobox ArbeitetAls füllen

.List = arrArb
Sperre = True
.ListIndex = "0"
Sperre = False
End With
CntLeeren


Tausend Dank schon mal
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
05.11.2024 14:09:23
Alwin Weisangler
Hallo Chris,

ich vermute mal, dass du dir um das Ding erst mal irgendwie zum Laufen zu bekommen, den Code aus dem Netz zusammengesucht hast.
Kann man machen, aber was raus kommt ist eben umständlich.
Du hattest schon diverse Array Sachen drin. Deshalb war ich davon ausgegangen, dass du damit zurechtkommst.
Ist nicht schlimm.

Ich habe in deiner Datei ein weiteres Userform angelegt und mal das Initialize nebst laden bei Klick in Listbox in alle Controls so angelegt, dass sich darauf aufbauen lässt. Die Tabellenblätter habe ich nicht verändert. Das QuickSort habe ich auch auf 2 Spalten angepasst. Der Grund dafür ist, dass ich gleich die Zeilennummern in die Listbox mitgegeben habe. Dadurch fällt das Gesuche im jeweiligen Tabellenblatt weg um an die korrekte Zeile zu kommen.

Baue auf dieser Basis weiter und wirst feststellen, wie wenig Code letztendlich erforderlich ist.
https://www.herber.de/bbs/user/173399.xlsm
Eine Fehlerbehandlung ist noch nicht drin enthalten.

Gruß Uwe
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
05.11.2024 15:36:36
DerChris
Hi Uwe,

das sieht schon mal echt genial aus. Scheint auch soweit alles zu machen.
Werde jetzt mal versuchen die Vorgänge alle nachzuvollziehen, damit ich besser drauf aufbauen kann.
Dann mal sehen ob ich den Rest in vielleicht etwas schönerer Weise nachziehen kann.

Hat mir auf jeden Fall schon mal gut geholfen.

Hoffe ich komme damit dann gut weiter :-)

Vielen Dank mal bis hierher

LG Chris
Anzeige
AW: Anfängerprojekt überarbeiten - für bessere Wege
05.11.2024 15:52:06
Alwin Weisangler
Gerne.

Gruß Uwe
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige