Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten Top
#3
Und wie greif ich da dann darauf zu ganz normal mit "Workbooks(Variable).Activate"?
Antworten 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
Antworten 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.
Antworten 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
Antworten Top
#7
Hallo,

ich zitiere mich mal selber

(25.10.2016, 12: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
Antworten 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
Antworten Top
#9
Thumbs Up 
Ok haut hin danke euch
Antworten 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
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top


Gehe zu:


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