Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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

Variable Public deklarieren

Variable Public deklarieren
19.08.2017 21:57:55
Jonas
Hallo Leute,
habe eine dumme Frage. Ist es richtig, wenn ich eine Variable bei Public deklariere muss ich sie nirgend anders mehr deklarieren?
Mach das sinn?

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable Public deklarieren
19.08.2017 22:06:01
Sepp
Hallo Jonas,
wenn du sie als Public deklarierst, ist sie im gesamten Projekt verfügbar.
Du solltest aber nur dann Public Variablen verwenden, wenn u sie auch wirklich benötigst.
Gruß Sepp

AW: Variable Public deklarieren
19.08.2017 22:22:19
Jonas
Danke Sepp.
Ich habe zum Beispiel eine Datei mit
Set wksdatei = Workbooks("Datei.xls")
beim Start von Excel Deklariert und dann
Dim wksdatei as Worksbook
Dutzendfach in den Makros. Also immer wenn ich auf die Datei zugreife.
Würde es da sinn machen?
Gruß
Jonas
Anzeige
AW: Variable Public deklarieren
19.08.2017 22:40:57
Sepp
Hallo Jonas,
das kann Sinn machen, allerings solltest du die in jeder prozedur versichern, das die Variable auch initialisiert ist.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_Open()
Call init
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Public objWB As Workbook

Sub init()
Set objWB = Workbooks.Open("E:\Forum\test.xlsx")
End Sub


Sub einMakro()

If objWB Is Nothing Then Call init

'dein Code

End Sub

Sub anderesMakro()

If objWB Is Nothing Then Call init

'dein Code

End Sub

Gruß Sepp

Anzeige
AW: Variable Public deklarieren
20.08.2017 16:12:56
Piet
Hallo Jonas,
Set wksdatei = Workbooks("Datei.xls")
ich weise dich hölich auf eine 2. Deklaration hin die hier Sinn macht und von mir dann benutzt wird.
Const und Public Variable lege ich gerne in einem extra Modul fest, wo nur solche Daten drin stehen! Gültig für alle Module! Der Vorteil ist, man kann sich alle wichtigen Adressen um z.b. Bereich zu löschen oder Daten einzufügen, Adressen zum Kopieren, Sortieren, in dieses Modul schreiben, braucht sie nicht im Projekt zu suchen. Und wenn sich Werte/Adressen aendern gehst du nur ins "Public_modul" und aenderst es dort! Gerade beim Programm entwickeln ein grosser Vorteil. Zu Bedenken ist das der Wert dieser Variablen bei Makro Ende nicht automatisch gelöscht wird!! Rufst du mit Public Variable ein anderes Programm auf übernimmt es die gespeicherten Werte!
Public Const WbEx = "Datei.xls"
Public Const Bereich1 = "G1:K150"
Public wksdatei As Workshet
im Modul so deklariert: - Set wksdatei = Workbooks(WbEx) - Hast du diese Set Anweisung einmal programmiert sollte dieser Wert für alle anderen Module gültig sein. Manchmal setze ich solche Variable bei Open Workbook auf definierte Werte. Einfach mal selbst testen wie es funktioniert.
mfg Piet
Anzeige
@ Sepp
20.08.2017 21:27:57
Zwenn
Hallo Sepp,
nachdem ich bisher schon so einige Deiner Tipps und Lösungen gelesen habe, habe ich wirklich Respekt vor Deinem Wiseen. Aber grade vor diesem Hintergrund, erlaube mir die Frage ... Hältst Du globale Variablen ernsthaft für sinnvoll?
Ich persönlich halte sie für kontraproduktiv. Sie zerstören den Sinn der strukturierten Programmierung. Klar ist VBA eine objektorientierte Sprache und Klassenvariablen sind natürlich sinnvoll. Aber praktisch niemand verwendet VBA objektorientiert. Insofern frage ich mich, wie sinnvoll ein eigenes Modul für globale Variablen ist.
Stichworte "Wiederverwendung von Code" und "Information Hiding". Oder der einfachen Devise folgend: "So lokal wie möglich, so global wie nötig."
Diese Diskussion keimte bereits einmal mit Luc auf. Mich interessiert Deine Meinug dazu.
Viele Grüße,
Zwenn
Anzeige
AW: @ Sepp
20.08.2017 21:34:08
Sepp
Hallo Zwenn,
das habe ich in meiner ersten Antwort ja schon beantwortet.
"Du solltest aber nur dann Public Variablen verwenden, wenn du sie auch wirklich benötigst."
Und genau so halte ich es auch, also nur dann, wenn man einen greifbaren Vorteil daraus zieht.
Gruß Sepp

AW: @ Sepp
20.08.2017 21:44:36
Zwenn
Hmm,
also ich habe mal gelernt, es gibt keinen Grund für globale Variablen. Es lässt sich auch alles mit lokalen Variablen lösen. Variablen werden einfach als Funktions-Parameter weitergegeben. Allerdings komme ich von C, daher meine Frage :-)
Danke für Deine Antwort.
Viele Grüße,
Zwenn
Anzeige
AW: @ Sepp
20.08.2017 21:51:55
Uduuh
Hallo,
Aber praktisch niemand verwendet VBA objektorientiert.
dann bin ich praktisch niemand ;-)
Globale Var können durchaus einen Sinn haben. Ich habe z.B. etliche Projekte mit globalen Dictionary-Objekten, die ich einmal fülle und dann in allen Modulen/Prozeduren verwende.
Gruß aus’m Pott
Udo

AW: @ Sepp
20.08.2017 22:01:49
Zwenn
Ok,
natürlich gibt es Leute, die die Objektorientierung nutzen. Aber Du wirst mir Recht geben, wenn ich sage, das sind die wenigsten derer, die VBA verwenden. Ich wollte Entwicklern wie Dir ja auch gar nicht zu nahe treten :-)
Wenn Du sagst, Du nutzt globale Dictionaries und gleichzeitig, Du programmierst obejktorientiert ... Nutzt Du Objektorientierung konsequent? Dann gäbe es ja im Sinne der strukturierten Programmierung gar keine globalen Variablen.
Viele Grüße,
Zwenn
Anzeige
Jeder der Objekte verwendet, pgmmiert letztlich …
21.08.2017 15:22:25
Luc:-?
…objektorientiert, Zwenn,
aber auch Objekte (auch Dictionary-Objekte!) kann man von Prozedur zu Prozedur weiterreichen und dabei immer neue, prozedur­interne Referenzen auf die­selben anlegen. Wenn ich globale Variablen verwende, dienen diese oft strukturordnenden Aufgaben (Übersichtlichkeit!) eines GesamtProjekts und sind idR keine Objekt­Referenzen, sondern eher identifizierende, nicht objektbildende Eigenschaften dersel­ben (zB .Name). Ansonsten verwende ich häufig globale Konstanten wie Enumerationen (→ projektweit sinn­voll!). Hinzu kommen dann auch GlobalVariablen in (Dok-)Klassen­Modulen, die so auch per CallByName Objekten zuordenbar sind, was für GlobalVariablen in allgemeinen Modulen nicht möglich ist.
🙈 🙉 🙊 🐵 Gruß, Luc :-?
Besser informiert mit …
Anzeige
AW: Jeder der Objekte verwendet, pgmmiert letztlich …
24.08.2017 18:41:28
Zwenn
Hallo Luc,
nun komme ich erst heute dazu dir für Deine Antwort zu danken.
Was Du schreibst kann ich nachvollziehen und mir sind diese Mechanismen auch klar. Ich wundere mich nur, dass es anscheinend für alle ganz selbstverständlich ist, unter VBA globale Variablen zu verwenden. Ich persönlich sehe darin absolut keinen Vorteil und kann mich mit einer Information, die auch Programmteilen bekannt ist, die sie nix angehen, einfach nicht anfreunden. Aber es ist ja kein Beinbruch, wenn jeder auf seine Weise klar kommt.
Mit dem konsequent objektorientierten Programmieren hatte ich gemeint, dass die strukturierte Programmierung wirklich außen vor bleibt. So passiert das in Java quasi automatisch. Naja, außer man kommt auf die Idee, alles in der Main-Methode abzuhandeln oder für jede Klasse die Instanzierung abzuschalten ;-) Ob das in VBA aber überhaupt möglich ist weiß ich nicht. Vermutlich ist es auf jeden Fall nicht sinnvoll, weil die objektorientierung vor allem für die Excel-Elemente (Zellen, Tabellenblätter, usw.) wichtig ist und wir sie automatisch nutzen.
Wie auch immer, es gibt noch jede Menge, was ich nicht über VBA weiß :-)
Viele Grüße,
Zwenn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige