26.06.2020, 21:19
ProjektübersichtVBA2_ralf_b.xlsm (Größe: 49,16 KB / Downloads: 6)
1. Hilfsfunktionen schreibst du bitte in ein Modul
2. deine Constantennamen sind zwar sehr informativ aber die machen deinen Code sehr unübersichtlich, weil die Befehle sehr breit werden
3. entweder entsprechen deine Beispielttabellen niciht dem echten Projekt oder du mahcst dir das mit deine Constanten zu einfach.
z.b. iCONST_ANZAHL_EINGABEFELDER ist 7 aber in der Personaltabelle hast du nur 4 Spalten.
Das dürfte auch bei den anderen Tabellen immer eine andere Spaltenanzahl sein. deshalb ist die Verwendung einer Konstante da eher hinderlich.
Das ermitteln der letzen Spalte wenn du sie benötigst, sollte dir keine Mühe bereiten.
4. ist_Zeile_leer kannst du getrost vergessen. Du prüfst darin immer in "Tabelle 1". Das macht keinen Sinn wenn du eine leere Zeile in Tabelle 2 suchst.
übergib der Funktion noch das Worksheet z.b. als Name und sprich es dann in der Funktion mit Worksheets ("NamederTabelle") an.
Die Prüfung auf leere Zeilen würde ich mit einer Prüfung des Bereiches auf AnzahllNichtleererZellen machen.
if Worksheetfunction.CountA(zuprüfenderBereich) = 0 then true else false ( nur mal so als Anregung)
5. deine Löschroutine ist fehlerhaft. da du in der Tabelle die Zeile löschst, passt die Zuordnung in deiner Liste(Zeilennumer , ...) nicht mehr.
Nach dem Löschen der Tabellenzeile verschieben sich die Zeilennummern. Nach lösche Zeile 5, wird aus Zeile 6 die neue Zeile 5.
Deshalb müßtest du die Listbox immer neu einlesen. Oder du verwendest die Rowsource eigenschaft, und verbindest damit Listenwerte direkt mit Tabellenwerten.
6. deine Textboxen heißen alle "Textbox & laufende Nummer". Das mag ja ganz nett sein wenn du die kleine Schleife benutzen willst,
aber für die spätere Codepflege und -lesbarkeit ist das tödlich. Vergib eindeutige, kurze Bezeichnungen. z.b. tbxPersNr
7. CStr(Tabelle2.Cells(lZeile, 1).Text) .text kommt schon als Text , den brauchst du nicht nochmal als Cstr casten.
8. du benutzt die Codenamen der Tabellen. z.b. Tabelle2.Range(......) Solltest du später mal eine Tabelle ersetzen müssen, hast du wieder extra Programmieraufwand.
Du müsstest überall im Code den Namen ändern. Siehe Punkt 4
9. bei der Inintialisierung der UF rufst du verschiedene Funktionen auf. Darin werden jedesmal die Textboxen 1 - 7 leer gemacht. das ist unötig wenn du mit dem ersten Projekt startest, dann kannst du direkt die Felder mit Werten füllen. Abhängig vom ersten Eintrag in deiner Projektliste
10. Arbeite mit dem Changevent. z.b. wenn sich liste1 ändert, dann fülle liste2 neu.