Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

In Workbook_Open eine globale Variable zuweisen

Forumthread: In Workbook_Open eine globale Variable zuweisen

In Workbook_Open eine globale Variable zuweisen
22.07.2025 20:22:14
Bona
Moin,
habe mir grade den Wolf gegoogelt, aber nichts von allen Vorschlägen hat funktioniert.

Ich möchte eine INI-Datei in den Makros verwenden, prüfe aber beim Start in Workbook_Open(), ob diese INI-Datei existiert. Dieser Status muß dann allen Makros zur Verfügung stehen, sonst müßte ich ja jedesmal vor der Abrage eines INI-Wertes die Existenz prüfen.
Wie oft empfohlen, habe ich die Variable in einem allgemeinen Modul als Public definiert, aber in Workbook_Open() muß ich sie dennoch definieren, sonst Fehlermeldung.

Code in "DieseArbeitsmappe":


Option Explicit
Private Sub Workbook_Open()
Dim sAppName As String, sIniFile As String
sAppName = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - InStr(StrReverse(ActiveWorkbook.Name), "."))
' INI-File vorhanden?
sIniFile = sAppName & ".ini"
If Dir(sIniFile) = "" Then
MsgBox "INI-Datei nicht vorhanden" & Chr(10) & Chr(13) & _
sIniFile, vbOKOnly
Application.Quit
End If
End Sub


Im allgemeinen Modul:


Option Explicit
Public sIniFile As String

Sub FilesTransfer(ByVal control As IRibbonControl)
Dim oRegex As Object

Set oRegex = CreateObject("vbscript.regexp")
oRegex.Pattern = GetIniValue(sIniFile, "Regex", "Date")
...


Was mache ich falsch?
Bona
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In Workbook_Open eine globale Variable zuweisen
22.07.2025 20:28:24
daniel
Hi
mal zum Wording:

1. das ist "deklarieren":
Option Explicit

Public sIniFile As String


2. das ist "Wert zuweisen" (und ich vermute, das meinst du mit "definieren")
sIniFile = sAppName & ".ini"

dieses "Wert zuweisen" muss möglichst früh im Ablauf der Makros erfolgen, zumindest bevor diese Variable dann das erste mal ausgelesen wird.

Das Workbook_open ist das nach dem Öffnen der Datei das erste Makro, das ausgeführt wird.

Gruß Daniel
Anzeige
AW: In Workbook_Open eine globale Variable zuweisen
22.07.2025 20:58:23
Bona
Hi Daniel,
danke für diese schnelle Antwort. Ja, mit dem Wording hat Du recht.

Die Zuweisung, das ist ja klar, erfolgt in "Workbook_Open()", in "DieseArbeitsmappe", aber wo erfolgt die Deklaration? Doch auch in "DieseArbeitsmappe", oder?
Aber dennoch ist sie im Makro Sub FilesTransfer(...) im Modul "Main" nicht verfügbar.

Was ist falsch?

Bona
Anzeige
AW: In Workbook_Open eine globale Variable zuweisen
22.07.2025 22:19:22
Daniel
Wenn die Deklaration in einem allgemeinen Modul erfolgt, ist die Variable in jedem anderen Modul direkt bekannt.

Deklariert man sie in einem speziellen Modul, bzw in einem Objekt zugeordneten Modul (Tabelle1, DieseArbeitsmappe, Userform), dann muss man den Modulnamen voranstellen um die Variable in einem anderen Modul zu verwenden: Tabelle1.Variablenname

Gruß Daniel
Anzeige
AW: In Workbook_Open eine globale Variable zuweisen
23.07.2025 17:21:13
Bona
Hallo Daniel,
vor lauter Bäumen habe ich den Wald nicht gesehen. Das Projekt beruht auf einer Arbeitsmappe mit Vorgabewerten. Und nur, wenn diese geöffnet wird, wird das zugehörige AddIn, in dem die besagte globale Variable deklariert ist, geladen. Daher ist beim Laden dieser Arbeitsmappe die globale Variable, die im AddIn steht, (noch) nicht deklariert, was aber im Makro der Arbeitsmappe notwendig ist.

Habe das Konzept dahingehend abgeändert, daß wenn die INI-Datei nicht gefunden wird, die Arbeitsmappe nach entsprechender Meldung geschlossen wird. Andernfalls ist die INI-Datei ja vorhanden und kann entsprechend gelesen werden.
  If Dir(sIniFile) = "" Then

MsgBox "INI-Datei nicht vorhanden" & Chr(10) & Chr(13) & _
sIniFile, vbOKOnly
Application.Quit
End If

Nochmal vielen Dank für's Augen öffnen ;-)

Bona
Anzeige
AW: In Workbook_Open eine globale Variable zuweisen
22.07.2025 21:52:34
Bona
Hi Daniel,
hab's endlich hinbekommen, muß im Projekt nochmal nachsehen, was ich da falsch gemacht habe.
So funktioniert es, zumindest in einer Test-Umgebung:

Code in "DieseArbeitsmappe"
Option Explicit

Private Sub Workbook_Open()
sTest = "Testvariable"
Debug.Print "Workbook_Open: " & sTest
End Sub


Code in Modul1:
Option Explicit

Public sTest As String
Function TestVar()
MsgBox "Inhalt der Variablen: " & sTest
Debug.Print "Macro TestVar: " & sTest
TestVar = sTest
End Function


Danke, Problem gelöst.
Anzeige

Forumthreads zu verwandten Themen

Anzeige