Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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
Inhaltsverzeichnis

Warum Variablen deklarieren

Warum Variablen deklarieren
10.06.2020 11:52:58
Klaus
Hallo ihr Excel-Profis,
ich wollte mal nachfragen, warum man innerhalb von VB, Variablen deklarieren muss/sollte?, da ja alle Variablen standardmäßig als Variant deklariert sind und man damit ja auch arbeiten kann.
Kann mir jemand erklären in welchen Fällen es wirklich notwendig ist die Variablen zu deklarieren bzw warum?
Vielen Dank im voraus.
Gruß
Klaus

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Warum Variablen deklarieren
10.06.2020 11:56:40
ralf_b
variant braucht den meisten speicherplatz und es hilft ungemein wenn man den typ einer variablen festlegt. dann sind fehler vermeidbar und auch besser auffindbar. wenn du dem program überläßt was es aus deiner variablen macht, ist das nicht sinnvoll.
AW: Warum Variablen deklarieren
10.06.2020 12:05:29
Klaus
Kann mir jemand ein konkretes Beispiel nennen oder auch eventuell im Allgemeinen, wann es wirklich sinnvoll ist. Ich kann sonst die sinnhaftigkeit nicht ganz nachvollziehen.
AW: Warum Variablen deklarieren
10.06.2020 12:10:03
ralf_b
wenn du in deinem code keine probleme damit hast, solltest du dir eigentlich auch keinen kopf deswegen machen.
an sonsten gibt es sicher viele hinweise warum und wieso in den Tutorials und Anfänger hilfen für Programmieren hier im Netz.
Zitat aus: https://www.herber.de/vbabasics/0014.html#Grundlegendes
Variablendeklaration
Wie schon erwähnt, sind Variablen generell zu deklarieren und zu dimensionieren. Werden sie nicht deklariert oder nicht dimensioniert, handelt es sich beim Programmstart in jedem Fall um den Variablentyp Variant, der zum einen mit 16 Bytes den größten Speicherplatz für sich beansprucht, zum anderen während des Programmablaufes seinen Typ mehrmals wechseln kann, was möglicherweise die Programmausführung erschwert. Außerdem benötigen Variant-Variablen erheblich längere Berechnungszeiten als andere.
Anzeige
AW: Warum Variablen deklarieren
10.06.2020 12:13:10
UweD
Hallo
Früher als die Rechner noch wenig Arbeitsspeicher war das eine Möglichkeit den reservierten Speicher zu begrenzen.
Heute ist das nicht mehr der Grund.
- - - - -
Ein Nebeneffekt ist aber die Fehlerverringerung in Code...
Im VBEditor unter Extras Optionen den Haken setzen bei "Variablendeklaration erforderlich"
Dann erscheint in jedem neuen Modul Im oberen Bereich "Option Explicit"
Dadurch wird geprüft, ob Variablen Deklariert sind.
Bezeichnungen, die fehlen (meist bei Schreibfehlern) werden bemängelt.
LG UweD
Anzeige
AW: Warum Variablen deklarieren
10.06.2020 12:18:26
Martin
Hallo Klaus,
theoretisch und praktisch kannst du tatsächlich jede Variable als Variant deklarieren. Neben dem erhöhten Speicherbedarf ist es aber auch zum Nachvollziehen des eigenen Codes und zur Vermeidung von Programmierfehlern wesentlich sinnvoller die korrekten Variablentypen zu deklarieren und zu benennen (siehe Ungarische Notation).
Beispiel: Du liest TextBoxen eines UserForms aus und weist einer Date-Variable die falsche TextBox mit einem Textinhalt zu. Sofort würde bei korrekter Variablendeklaration eine Fehlermeldung ausgegeben werden. Wenn du statt der Date-Variable aber eine Variant-Variable zuweist, erhälst du keine Fehlermeldung und es können Folgefehler in deinem Code entstehen. Es kann nun wesentlich komplizierter werden den Fehler zu finden, insbesondere wenn dein Code ohne Fehlermeldung durchläuft, aber ein falsches Ergebnis geliefert wird.
Viele Grüße
Martin
Anzeige
AW: Warum Variablen deklarieren
10.06.2020 13:17:05
Mullit
Hallo,
[...] warum man innerhalb von VB, Variablen deklarieren muss/sollte?, 

wenn man professionell proggen will, sollte man es umgekehrt betrachten: In (beinahe) allen anderen Prog-Sprachen muß man Variablen deklarieren, da gibt es keine automat. Deklaration eines Std-Typs, wie in VBA. Diese Notwendigkeit sollte man sich auch in VBA zu eigen machen...
Die Gründe wurden hier ja schon beschr., P. Haserodt hatte dazu ein gutes Bsp. auf seiner Seite, nicht zuletzt M$ selbst empfiehlt dies ebenso, man sollte sich von dieser gutgemeinten Anfänger-Hilfe einer allg. Deklaration in VBA möglichst zügig verabschieden, noch ein paar Links:
https://docs.microsoft.com/de-de/office/vba/language/concepts/getting-started/declaring-variables
https://www.online-excel.de/excel/singsel_vba.php?f=4
Quote M$:
You can implicitly declare a variable in Visual Basic simply by using it in an assignment statement. All variables that are implicitly declared are of type Variant. Variables of type Variant require more memory resources than most other variables. Your application will be more efficient if you declare variables explicitly and with a specific data type. Explicitly declaring all variables reduces the incidence of naming-conflict errors and spelling mistakes.
Btw. guck Dir am besten mal die Codes von starken VBA-Proggern an(Nepumuk, Case, Isabelle, Daniel(slowboarder), Phelan....to name but a few...), dann siehst schon, wo der Hase langläuft...;-)
Gruß, Mullit
Anzeige
AW: Warum Variablen deklarieren
10.06.2020 13:21:33
Mullit
...nota bene: Mit 'allg. Deklaration in VBA' meinte ich nat. automat. Deklaration als Variant- Var, aber dürfte wohl klar geworden sein..;-)
Gruß, Mullit
Das Weglassen der Deklaration, ...
10.06.2020 21:32:25
Luc:?
…das von manchen Cracks propagiert wird (zB snb), ist nur dann sinnvoll, Klaus,
wenn man stets nur einfache kleine Pgmm zur ProzessAutomatisierung schreibt. Sobald es um ganze Projekte* aus möglicherweise vielen Pgmm geht, ist eine Deklaration sinnvoll. Dazu gehört dann auch, dass man alle nicht-trivialen konstanten Werte benennt und im Deklarationsteil am PgmAnfang unter Const aufführt. Das erleichtert spätere PgmÄnderungen ungemein, sofern sich die Änderungen hptsächlich auf Konstanten und Variablen beziehen.
* Darunter fallen auch UDFs nach Xl-Standard, die den Fktsvorrat von Xl sinnvoll und passend ergänzen. Derartige PgmmierArbeit liegt idR nicht im Kompetenz- und InteressenBereich eines Anwendungspgmmierers (und sei er auch noch so gut, denn der ist eher auf ganze Projekte mit komplexen Abläufen und ggf eigenen kleinen Fktt als Hilfsmittel dazu orientiert. Über das, was eine generalistische Xl-Fkt leistet(/n muss), macht er sich eher keine Gedanken.
Die von Martin erwähnte Ungarische Notation hat nichts mit Deklaration zu tun, sondern ist nur eine Namenskonvention, die, falsch (nicht im Sinne des Erfinders) angewendet (Mehrheit der VBA-Anwender), eher kontraproduktiv ist und schnell in Widerspruch zum Datentyp geraten kann. Dann sollte man besser den aus dem 1.Zeichen des Namens ableitbaren Deklarationsautomatismus benutzen, den VBA zV stellt.
Gruß, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
Nichtsdestotrotz Durchblick verbessern mit …

Anzeige
AW: Das Weglassen der Deklaration, ...
10.06.2020 22:06:38
Mullit
...ist immer ganz große Scheiße....andemio...man muß es doch nur mal auf den Punkt bringen...;-)
Gruß, Mullit
Da auch US-MVPs mit hoher INet-Präsenz ...
11.06.2020 18:48:26
Luc:?
…unter den „Deklarationslosen“ zu finden sind, Mullit,
sollte man schon auch auf deren Existenz und Gründe eingehen.
Und wenn man schon, so wie du, Vertreter „excellenten“ Programmierens nennt, sollten deren hiesige Arbeiten auch zumeist bsphaft und nicht einfach schnell geschrieben, nur auf die spezielle Situation bezogen u/o mehr oder weniger entspannender ZeitVertreib eines Profis sein…
Gruß, Luc :-?
AW: Daß auch US-MVPs mit hoher INet-Präsenz ...
12.06.2020 01:05:21
Mullit
...nicht zwangsläufig für guten und sauberen Code stehen, sollte man dann bei solchen Vertretern als erste Erkenntnis mal verbuchen...
Mir sind da auch ehrlich gesagt keine bekannt, gut Bill Jelen kommt mir da als erstes in den Sinn, hat auch immer ein paar gute Tipps und Tricks parat, läßt sich nicht leugnen, aber ist nich unbedingt ein Progger und der will eben auch Bücher verkaufen, gell...
Ich wundere mich auch etwas, daß Du hier den Advocatus diaboli gibst, schließlich deklarierst Du meines Wissen selber alles aus, mitunter etwas kryptisch, aber ok...
Abschließend sei noch angemerkt, wenn Du einen Informatik-Hochschulkurs belegst und leidest an Deklarationsrenitenz laufen a) bei i. Gr. allen verbr. Sprachen die Programme nich (in meinem Fall Modula-2 (ja, laaaang her...) u. etwas Java...) und b) schicken sie Dich nach der ersten Woche rüber zu den Biologen, Frösche aufschneiden und rufen Dir noch hinterher, komm wieder Junge, wenn Du weißt, was die Begriffe Datentypen und Variablen sowie die Deklaration derselben in der Informatik bedeuten...
Ach ja im übrigen bin ich doch erstaunt (na ja eigentl nich wirklich...;-)), daß Du gerade dieser Auswahl die Beispielhaftigkeit ihrer Codes absprichst, von Nepumuk brauchen wir da schon mal gar nich reden und hast Du Dir mal Ralfs (Case) Webseite anges., da brauchst Du ob Profi oder Novize schon gar nich mehr zu proggen, kannst gleich mit nem xlsm-File als Download durchstarten..nur mal am Rande...aber gut, der Lern-Effekt auf mich und nicht zuletzt mein Eindruck war da ein anderer...;-)
Gruß, Mullit
Anzeige
Snb hat auch 'ne tolle WebSite, ...
12.06.2020 23:49:05
Luc:?
…Mullit,
und auch 'ne andere Auffassung, obwohl er in einigen Fällen ebenfalls deklariert. Und genau diesen Unterschied habe ich gemeint. Mitunter benötigt man ja tatsächlich keine Deklaration und nur in diesen Fällen fehlt sie bei mir. Aber ebenso wie Nepumuk in seinen größeren Projekten, vereinbare ich auch Konstanten, was hier von anderen nur selten gezeigt wird. Und wenn eine Deklaration mal wirklich kryptisch ist, dann ist das Absicht… ;-)
Um die von dir jetzt Genannten ging's kaum, obwohl ich bei so manchem Nur-Fml-Entwickler mitunter mehr Kreativität feststelle. Gute PgmmierKenntnisse sind Voraussetzung für gute und fktionable Pgmm. Das ist genauso wie beim Handwerk. Zur Kreativität gehört aber mehr und das ist bei manchen Fml-Cracks eher zu finden. Und wenn ein Pgmmierer dann erklärt, dass er von Fmln keine Ahnung hat…
Luc :-?
Anzeige
AW: Snb hat auch 'ne tolle WebSite, ...
13.06.2020 01:18:35
Daniel
Wrm glbst du, dass Prgrmmerer wngr kreat hbn als Frmlrer?
AW: Warum Variablen deklarieren
11.06.2020 01:30:11
Daniel
Hi
Das Thema wird hier ganz gut erklärt, vor allem, warum man Option Explicit verwenden sollte:
https://online-excel.de/excel/singsel_vba.php?f=4
Prinzipiell kann man auch alles als Variant deklarieren, der Code läuft.
Variant-Variablen werden zwar etwas langsamer verarbeitet als spezifisch deklarierte, aber das dürfte nur bei Schleifen mit hohen Umlaufzahlen ins Gewicht fallen.
Weiter Vorteile der Exakten Deklaration auf einen bestimmten Datentyp wären
- habe ich eine Objekt-Variable auf einen bestimmten Objekttypen deklariert (Dim x as Range), bietet mir die Intellisense (STRG+Leer) beim Schreiben des Codes diejenigen Eigenschaften und Methoden an, die zu diesem Objekttypen passen und ich kann sie aus einer Vorschlagsliste auswählen, ohne dass ich die exakte Schreibweise kennen muss. Bei Variantvariablen funktioniert dieser Service natürlich nicht und ich muss selber wissen, wie die jeweilige Methode oder Eigenschaft in VBA exakt geschrieben werden muss und ob sie überhaupt für diesen Objekttyp möglich ist.
- arbeite ich mit Ganzzahlen und größer/kleiner/ist gleich-Vergleichen, kann es bei Berechnungen dazu kommen, dass bei Variantdeklaration der Datentyp Gleitkommazahlen eingesetzt wird und dann durch die kleinen Ungenauigkeiten, die diesem Datentyp bei Berechnungen zu eigen sind, solche Vergleiche falsche Ergebnisse liefern.
Habe ich die Variablen zwangsweise als Ganzzahl deklariert (Integer, Long), so besteht dieses Problem nicht mehr.
Gruß Daniel
Anzeige
Nötig: Wenn du wissen willst, was du tust! (owT)
11.06.2020 12:01:07
EtoPHG

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige