Hallöchen Dirk,
Ganz am Anfang unseres Kontaktes habe ich dich so verstanden, dass ich die Deklaration der Variablen im Modulkopf zu ausführlich gemacht habe.
Dies trifft nicht ganz zu. Dein Programmcode war anfangs äußerst unübersichtlich, weshalb ähnliche bzw. identische Routinen mehrfach vorkamen und unnötige Variablen deklariert werden mussten.
Ist die ANzahl dieser Variablen wichtig (* jeder var bedutet doch Speicherplatz) Vin früher her war das immer ein Arbeitsspeicherproblem (*Aussage meines Onkels der Programmierer war).
1) Anders, als vielleicht dein Onkel, solltest du
heute keine Speicherprobleme mehr haben.
Eine Integer-Variable verbraucht z.B., je nach System, 2 - 4 Byte und gute RAMs haben heute 16 - 32 GB (macht mind. 4 Mio. Variablen im RAM, exkl. SSD), da ist also viel Platz nach oben...
2) Das KeyEvent o.ä. wird bei jedem Tastendruck erneut aufgerufen. Wenn dann im Event-Handler zig Variablen deklariert sind, die zwar ihren Wert nie ändern, aber stets wieder geladen werden müssen, verliert man dadurch wertvolle Prozess-Zeit. Die Bereitstellung eines neuen Speicherplatzes nimmt mehr Zeit in Anspruch als nur der einfache Zugriff per Pointer auf eine Speichereinheit. Dies kann man z.B. durch eine Initialisierungs-Routine ändern, die nur bei Start des Programms durchlaufen werden muss.
Desweiteren gäbe es auch die Möglichkeit mit globalen Konstanten (also Werte, die vom gesamten Programm immer wieder genutzt und direkt im ersten Modulkopf definiert werden). Dies ist z.B. sehr gut in der OpenOffice-Bibliothek Access2Base zu sehen, welche mit Open-/LibreOffice ausgeliefert wird.
3) Eine grundsätzliche Überlegung sollte im Idealfall stets in einem Verstehen darüber enden,
wann,
wo und
wie der Zugriff auf einen Wert in einer Variable am effektivsten vollzogen werden kann.
Ich werde wohl diese Bariablen FText01....Ftext15 usw als Globale Variablen definieren (*Mein derzeituger Gedanke) .
Genau das meinte ich - super.
Code: Alles auswählen
Dim TEin as Object : TEin = odlg_Dialog.getControl("oTextEinheit")
Hier wird z.B. ein Objekt referenziert, welches sich während der gesamten Laufzeit des Programms nicht mehr verändern wird - wobei dies jedesmal geschieht, wenn man im Dialog eine Taste betätigt. Zumal eine Objektzuweisung ja schon geschehen sollte, wenn der zugehörige Dialog geladen wird (analog zu deinen Listenern).
# Tipp) Schreibe in jedes Modul als erste Zeile:
... und dann teste dein Programm noch einmal. Wahrscheinlich wirst du noch einige Variablen deklarieren müssen. Dieses Verfahren schützt dich vor unnötiger Fehlersuche zwecks fehlender Variablendeklarationen. Schau dir dazu auch noch einmal OOME an.
# Tipp) Du erstellst hier für jeden Text eine eigene Variable, nur um diese dann in ein Array zu laden?!
Code: Alles auswählen
HText01 = "Geben Sie die Firma, oder ein Leerzeichen ein und bestätigen Sie mit " & HText & "."
HText02 = "Geben Sie den Vornamen ein, und bestätigen Sie mit " & HText & "."
HText03 = "Geben Sie den Nachnamen ein, und bestätigen Sie mit " & HText & "."
...
Hilfe = Array(Htext00,Htext01,Htext02,Htext03,Htext04,Htext05,Htext06,Htext07,_
Htext08,Htext09,Htext10,Htext11,Htext12,Htext13)
Erstelle doch gleich zwei Arrays mit allen Texten - dann ersparst du dir auf einmal 26 Variablen? Ist nur
eine Möglichkeit...
Code: Alles auswählen
Array("Geben Sie die Firma, oder ein Leerzeichen ein und bestätigen Sie mit " & HText & ".",_
"Geben Sie den Vornamen ein, und bestätigen Sie mit " & HText & ".")
... oder....
Code: Alles auswählen
Array(1, "Geben Sie die Firma, oder ein Leerzeichen ein und bestätigen Sie mit " & HText & ".",_
2, "Geben Sie den Vornamen ein, und bestätigen Sie mit " & HText & ".")
# Tipp) In Funktionsköpfen bedienst du dich keiner Variablendeklaration...
Um einer Fehlersuche aufgrund falsch zugewiesener Variablen zu entgehen, stets den Typ der zu erwartenden Variable angeben...
# Tipp) In deinem Code werden immer noch viel zu viele Variablen erstellt, die unnötig sind und zu Verwirrung führen (können)...
Code: Alles auswählen
Dim oTbHin as Object
Dim TbHin as String : TbHin = "Hintergrund"
oTbHin = oDoc.Sheets.getByName(TbHin)
Hier wird eine Variable (TbHin) für einen String erstellt, welcher ausschliesslich und einmalig für die Objektzuweisung (oTbHin) dient. Es existiert somit eine Variable, die niemals mehr irgendjemand benötigt.
Die direkte Referenzierung: oTbHin = oDoc.Sheets.getByName("Einstellungen") genügt vollkommen und man muss zudem nicht erst noch nach dem Wert von TbHin recherchieren.
Bemerkung:
"Variablen dienen zur Zwischenspeicherung von Werten, die zur Laufzeit wiederverwendet werden."
Du könntest, ohne Weiteres, auf 40 - 50 Variablen in deinem letzten Code verzichten, weshalb durch die nicht mehr benötigten Definitionen etwa die Hälfte deines Codes gelöscht werden könnte.
> Nur aus Neugier...
Code: Alles auswählen
"Geben Sie die Telefax-Nr., oder ein Leerzeichen ein und bestätigen Sie mit " & HText & "."
Beim Anlegen eines neuen Benutzerdatensatzes
muss der Benutzer in jedem der 13 Felder
mindestens ein Leerzeichen setzen? Warum nicht einfach
NICHTS, wie man das sonst so gewohnt ist?
Jetzt aber zu Deiner , wie sagtest Du , "spontaner Idee ... zu dugitalisieren????? Ähm ich dachte Bibliotheken werden am Rechner entwickelt und Rechner = Digital??? oder schreibst du das erst auf Papier???
Es enttäuscht mich gerade zutiefst, daß gerade ein Schreinermeister mit gebundenen, bedruckten Blättern aus verdichteten Holzfasern gar nichts anfangen an?!
Ich meinte natürlich eine analoge Bibliothek - aus Büchern.
Falls man sich nicht mehr liest, ein besinnliches Fest und einen grandiosen Start im neuen Jahr!
Viele Grüße,
Marcel