Globale Variablen in VBA
#1
Hey Leute

Kann mir jemand sagen, wie ich den Pfad und den Dateinamen global deklarieren kann das ich die in allen Modulen direkt aufrufen kann?


Code:
Dim sFile As String, sPath As String, tFile As String, tPath As String

      sFile = "A.xlsm"
       sPath = "BBBBBBBBBBB" & "\" & sFile

       tFile = "X.xlsm"
       tPath = "YYYYYYYYYYY" & "\" & tFile
Sprich in einem anderen SUB dann mit "Workbooks(sFile).Activate" ansprechen.
Die Pfade ändern sich nämlich laufend und dass ich dann den Pfad nur 1 mal ändern muss und nicht 100 mal.

Lg Kash
Top
#2
Hallo,

die globalen Variablen mußt Du außerhalb einer Prozedur in einem allgemeinen Modul deklarieren.
Module und VBAProject
Gruß Stefan
Win 10 / Office 2016
Top
#3
Und wie greif ich da dann darauf zu ganz normal mit "Workbooks(Variable).Activate"?
Top
#4
Hallo Kash

lege ein neues Modulblatt an, nenne es wenn du willst in Global_mod oder Public_mod um, und schreibe dir alle Variablen und Constanten so rein:
Global  (alte Definition Excel 5 Zeit)   oder  Public   (neue Definition)   beide sind gültig!   Public ist moderner, wird heute allgemein verwendet.

Public sFile as String, sPath as String, tFile as String, tPath as String 
Public i as Integer, j as Integer, lz as long   'LastZell as Long
Public fmdTxt as String, ok as Variant    'Fehlermelde Text, ok für Msgbox Abfragen mit OkCancel usw.  (als Variant)
Public Offen as String   'Variavle zum Abfragen ob eine Datei bereits geöffnet ist.  (Bei Nein Abbruch oder Datei öffnen)
Public Const ClrBereich = "A1:X200"    'Bereich zum Löschen 
Public Const ListAnf = "B14"    '1. Zeile zum auflisten von ....

Bitte bedenke das Public Variable öffentlich sind und sich nicht von selbst löschen!!  D.h. steht da ein Wert drin wird er im naechsten Makro übernommen. Ich benutze das z.B. bei Fehlermedunen wenn es mehrere Makros mit Fehlermeldung gibt. Dann schreibe ich für die Fehlermeldung ein eigenes Sub Programm und übergebe den Meldetext als Variable für eine nachfolgende Abfrage ob man das Programm abbrechen soll. Oder zum Prüfen ob eine Datei Offen ist mit Abbruch oder Sprung ins Datei Öffnen Programm.  Man kann viel damit spielen

mfg  Gast 123
Top
#5
ich verweise noch auf den Vorteil beim Entwickeln grosser Programme alle Adressen die verwendet werden für Suchen, Kopieren, Auflisten, Löschen in Public Const Variable zu schreiben. (oder Wb Namen verwenden)  Vorteil der Public Adressen ist, das man bei Zeilen/Stalen Änderungen nur im Public Modul diese Adresse ändern muss. Die ist dann für alle Module gültig. Ein grosser Vorteil wenn man noch am entwickeln ist.
Top
#6
Code:
Public Sub Globale_Deklaration()
        
    Public sFile, sPath, tFile, tPath As String
        
        sFile = "AAAAAAA.xlsm"
        sPath = "G:\BBBBB" & "\" & sFile

        tFile = "CCCCCC.xlsm"
        tPath = "G:\DDDDDD" & "\" & tFile


End Sub


Ich hab das jetz als eigenes Modul geschrieben. Das mit dem aufrufen in den anderen Subs funktioniert trotzdem nicht

Aufruf:
Code:
    If WkbExists(sFile) = False Then
        Workbooks.Open sPath
        Sheets("Okt.16").Select
    Else
        Workbooks(sFile).Activate
        Sheets("Okt.16").Select
    End If
Top
#7
Hallo,

ich zitiere mich mal selber

(25.10.2016, 13:58)Steffl schrieb: die globalen Variablen mußt Du außerhalb einer Prozedur in einem allgemeinen Modul deklarieren.

Code:
Public sFile As String, sPath As String, tFile As String, tPath As String

Public Sub Globale_Deklaration()
        
        
        sFile = "AAAAAAA.xlsm"
        sPath = "G:\BBBBB" & "\" & sFile

        tFile = "CCCCCC.xlsm"
        tPath = "G:\DDDDDD" & "\" & tFile


End Sub
Gruß Stefan
Win 10 / Office 2016
Top
#8
Ein wenig mustard!  :05:
Globale Variablen haben den prinzipiellen Nachteil, dass sie während der Laufzeit im Speicher sind, obwohl sie nur zu gewissen Zeiten erforderlich sind.
Dies kann man besser mit UDFs lösen.
In einem allgemeinen Modul z.B. ein festgelegter Pfad:
Code:
Function MeinPfad() As String
MeinPfad = "C:\Rhabarber\Kamelle\"
End Function

Diese UDF kann jederzeit temporär von jedem (Klassen-)Modul aufgerufen werden:
Code:
Sub RPP()
MsgBox MeinPfad
End Sub

Nach Ende der Sub ist der Speicher frei!


My two cents,
Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • Kash
Top
#9
Thumbs Up 
Ok haut hin danke euch
Top
#10
Hallo,

dann versuchen wir es doch mal so:

Zitat:Option Explicit

Public varA, varB As Integer
Public varD, varS As Boolean


Sub varAbfrage()
MsgBox "varA = " & varA & " ; " & varB
varA = varA + 5
MsgBox "varA = " & varA & " ; " & varB
End Sub


Sub TestAufruf()
MsgBox "varA = " & varA & " ; varB = " & varB _
& Chr(10) & "varD = " & varD & " ; varS = " & varS
End Sub

Das Ganze gehört in ein allgemeines Modul

und wie schon einige Male angemerkt wurde, die Public-Variablen sind nicht Bestandteil irgendwelcher
Sub's oder Funktionen. Sie liegen außerhalb / oberhalb der Makros.

Später
Tja. wenn man 'ne Weile vom Rechner weg war, sollte man vielleicht mal schauen, ob der Post inzwischen überfüssig ist. mea culpa
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste