Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
960to964
960to964
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Das Wort zum Sonntag

Das Wort zum Sonntag
23.03.2008 17:18:00
Nepumuk
Hallo,
ich sehe das oft in Foren und herunter geladenen Mappen. Da werden wahre Monsterprozeduren verwendet, die 100 Funktionen in sich vereinen, aber kaum noch zu durchschauen sind.
Das macht es anderen Programmierern schwer und erhöht damit den Wartungsaufwand.
Auch wenn es etwas Selbstgeschriebenes ist, denn nach ein paar Monaten hat "man" oft keinen Schimmer mehr, was "man" sich damals dabei gedacht hat.
Darum heute mal zum Thema sauber programmieren.
1. Modularisierung - Sprich es werden keine Fünfhundertzeiler geschrieben, sondern kleine, überschaubare Einheiten mit wenigen Funktionen. Die lassen sich leichter lesen, warten und zusätzlich auch noch mehrfach verwenden.
2. Das Hauptprogramm besteht eigentlich nur aus Aufrufen dieser kleinen Einheiten. Da lässt sich dann schnell eine zusätzliche Funktion integrieren.
3. Diese kleinen Einheiten sind alles Funktionen die den Erfolg oder Misserfolg als True oder False zurückgeben. Damit lässt sich im Steuerprogramm eine If - Then Verschachtelung aufbauen. Wenn also ein Teil nicht ausgeführt werden kann, dann werden die nachfolgenden Funktionen gar nicht mehr aufgerufen.
4. Deklarationen - Die gehören alle in den Kopf einer Prozedur. Denn es bringt nichts zu versuchen, bedingt eine Variable anzulegen. Dazu folgendes Beispiel:
Public Sub Beispiel()
    Dim intVariable1 As Integer
    If intVariable1 = 1 Then
        Dim intVariable2 As Integer
    End If
    MsgBox intVariable2
End Sub

Die Variable wird anscheinend nicht dimensioniert und es gibt doch keinen Fehler? Klar, denn in dem Moment, in dem die Prozedur kompiliert wird, werden alle Dim-Anweisungen ausgeführt. Egal wo sie in der Prozedur stehen. Verwenden lassen sie sich allerdings nur nach der Dim-Anweisung.
5. Variablennamen – hier mochte ich eine Seite empfehlen:
http://www.it-academy.cc/article/995/Ungarische+Notation+fuer+Visual+Basic.html
Es ist kaum Mehraufwand, da der komplette Name meistens nur einmal geschrieben werden muss. Für jedes weitere mal benutze ich die ersten vier Buchstaben und dann die Tastenkombination Strg+Leertaste. Dann steht der Name meistens schon komplett da, ansonsten ist er nicht sehr tief in der aufpoppenden Liste zum auswählen. Die Namen sollten sprechend sein. In den Urzeiten von VB waren die Namen auf 8 Zeichen beschränkt, da hatte ich oft Schwierigkeiten einen sprechenden zu finden. Heute kann der Name 255 Zeichen lang sein, also fast eine ganz kleine Kurzgeschichte. Nutzt das!
6. Jede Zeile wird kommentiert. Ok, auch ich erspare mir den Kommentar für jedes End If und jedes Next. Aber ansonsten zieh ich das durch. Denn bei Projekten mit mehreren tausend Programmzeilen gibt es nur eins was besser ist als viele Kommentare: Noch mehr Kommentare.
Und jetzt Mal ein Beispiel wie das bei mir in Echt aussieht. Na gut, nicht ganz, denn in Wirklichkeit ist bei mir alles in englisch, heute ausnahmsweise in deutsch denn nicht jeder ist sprachbegabt. ;-)
https://www.herber.de/bbs/user/50956.xls
Eigentlich wollt ich nur den Code reinstellen, aber irgendwie verträgt mein JeanieButton die Zeilennummerierung nicht. Deswegen diesmal hochgeladen.
Die Zeilennummern erzeuge ich übrigens automatisch mit einem selbstgeschriebenen Addin. Falls du Interesse hast. Damit bekomme ich bei jeder Fehlermeldung auch die Zeile geliefert, in welcher der Fehler passierte.
Die Fehlermeldungen selbst werden eigentlich in ein Logfile geschrieben und nicht direkt als MsgBox ausgegeben. Aber wie du eine Textdatei erzeugt und Datensätze reinschreibst muss ich dir wohl nicht erklären. Es ist ja wie gesagt nur ein Beispiel ganz speziell für dich.
Gruß
Nepumuk

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Danke, Nepumuk! owT
23.03.2008 18:17:00
MichaV

Merci Nepumuk
23.03.2008 20:12:00
Ramses
Hallo Max
Danke für die Tips.
"...selbstgeschriebenen Addin. Falls du Interesse hast..."
Das würde mich schon interessieren :-)
Gruss Rainer

AW: Merci Nepumuk
23.03.2008 20:27:22
Nepumuk
Hi Rainer,
klaro: https://www.herber.de/bbs/user/50963.xla
Schönen Abend noch
Max
PS: Kennwort ist "x" Ich mach es nur zu, damit es im Projektexplorer nicht immer offen rumliegt.

Herzlichen Dank :-) Schöne Ostertage noch. o.w.T.
23.03.2008 20:29:00
Ramses
...

AW: Merci Nepumuk
24.03.2008 18:45:47
Reinhard
Hallo Max,
dankeschön für die xla.
In XL97 kommt "Kompilierungsfehler in basmain", an's Passwort kommt man dann auch nicht, ab XL2000 läuft es wie zu erwarten tadellos:-)
Daß bei einem Fehler die Zeilennummer angezeigt wird, ist das unmöglich?
Normal ist das nicht notwendig, kann ich ja mit F8 herausfinden, aber gelegentlich habe/hatte ich Code wo mir F8 nicht weiterhalf, da die Meldung kam "Wechsel in den Haltemodus derzeit nicht möglich" o.ä. und dies mehrere Codezeilen betraf, sodaß ich nicht ermitteln konnte, in welcher Zeile der Fehler auftrat.
Noch einen schönen Feiertagsausklang
Frostern
Reinhard, der sich auch auf das nächste Wort zum Sonntag freut *gg*

Anzeige
AW: Merci Nepumuk
24.03.2008 20:14:37
Nepumuk
Hallo Reinhard,
Daß bei einem Fehler die Zeilennummer angezeigt wird, ist das unmöglich?


Ich versteh die Frage jetzt nicht. In meinem Beispiel habe ich doch genau das verwirklicht. Wenn du natürlich keinen Errorhandler benutzt, dann bekommst du natürlich keine Zeilennummer zurück.
Aber so:

Public Sub test()
    1 Dim intIndex As Integer
    2 Dim intCounter As Integer
    3 On Error GoTo err_exit
    4 For intIndex = 1 To 1000
    5 intCounter = intCounter + intIndex
    6 Next
    7 Exit Sub
    8 err_exit:
    9 MsgBox "Fehler " & CStr(Err.Number) & " in Zeile " & CStr(Erl) & vbLf & vbLf _
        & Err.Description, vbCritical, "Befund"
End Sub


Gruß
Nepumuk

Anzeige
AW: Merci Nepumuk
24.03.2008 21:30:00
Reinhard
Hallo Nepumuk,
(was ist dir eigentlich lieber wenn ich das sage, Max oder Nepumuk?)
Natürlich hatte ich keinen Errorhandler :-(
Ich habe kleinen Code mit eingebautem Fehler durchnummeriert und laufen lassen.
Okay, Errorhandler baue ich ein.
Und, dein nächstes Wort zum Sonntag, mir wäre es sehr lieb wenn du mal über Fehlerbehandlung sprechen würdest.
Z.B. ob mein Vorgehen gut oder bescheuert ist, bzw. ob man das besser lösen kann.
On Error goto Fehler
Mldg= "Problem mit sort"
.sort ...
Mldg="Problem mit Find"
.find
Mldg="Problem mit specialcells
msgbox .specialtcells(...).address
...
exit sub
Fehler:
msgbox Mldg
Danke
Frostern
Reinhard

Anzeige
Auch von mir ein Danke dafür...
24.03.2008 13:09:00
mir
Hi Nepumuk
Danke Dir auch für das ADDIN.
Mal eine Anregung:
Frag doch mal den Hans, ob Du hier im Forum eine eigene Kategorie aufmachen kannst zum "Wort zum Sonntag", like xlAtoms oder so. Ist für viele Anfänger (und bestimmt auch Fortgeschrittene) sehr hilfreich und man kann dann immer wieder darauf zugreifen.
So long. Wünsch Dir noch einen schönen restlichen Sonntag.
Gruß aus dem Sauerland
Jens

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige