Registriert seit: 11.10.2016
Version(en): 2007
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
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 11.10.2016
Version(en): 2007
Und wie greif ich da dann darauf zu ganz normal mit "Workbooks(Variable).Activate"?
Registriert seit: 12.03.2016
Version(en): Excel 2003
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
Registriert seit: 12.03.2016
Version(en): Excel 2003
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.
Registriert seit: 11.10.2016
Version(en): 2007
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
Registriert seit: 11.04.2014
Version(en): Office 2007
25.10.2016, 14:28
(Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2016, 14:37 von Steffl.
Bearbeitungsgrund: Code eingefügt
)
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Kash
Registriert seit: 11.10.2016
Version(en): 2007
25.10.2016, 14:37
Ok haut hin danke euch
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
25.10.2016, 15:12
(Dieser Beitrag wurde zuletzt bearbeitet: 25.10.2016, 15:12 von Käpt'n Blaubär.)
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
Modulund 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äterTja. wenn man 'ne Weile vom Rechner weg war, sollte man vielleicht mal schauen, ob der Post inzwischen überfüssig ist. mea culpa