AW: bed Compilerkonst. nur bed. sinnvoll in VBA
08.07.2007 08:15:00
ingUR
AW: bedingte Compilerkonstonstanten nur bedingt sinnvoll in VBA
Hallo, Reinhard,
hatte am gestrigen Nachmittag nicht mehr die Zeit gefunden, näher auf den Einsatz von #If/#ElseIf/#Else/#End If einzugehen.
Es besteht im Dialog zu den Eigenschaften des VBAProjects, die Möglichkeit, Konstanten für die bedingte Kompilierung zu setzen (VBAProject::Eigenschaften von VBAProject...) zu setzen. Die Eingabe erfolgt im Eingabefeld "Argumente für die bedingte Kompilierung". Hier können mehrere Zuweisungen, durch Doppelpunkt getrennt, eingegeben werden. Sie wirken genauso wie eine Konstantendeklaration im allgemeinen Teil mit der Direktive #Const.
Beispiele für das Eingabefeld:
DebugModus=-1: EXCEL=1: DEMO=1: Sparversion=1
Dieser Eintrag ist also wirkungsgleich mit den Zeilen:
#Const DebugModus=-1
#Const EXCEL=1
#Const DEMO=1
#Const Sparversion=1
#If Not Sparversion then
'Code der Vollversion
#End If
Daneben sind mir noch die Kompilierkonstanten Vba5 und Vba6 für VBA bekannt, so dass damit im gewissen Grade Kompatibilitätsprobleme abgefangen werden können. Vba6steht für 2000 bzw. 2002 (XP). Ferner gibt es für die Betriebssystemebene die Compilerkonstanten Win16, Win32 und Mac (Ob die Aufzählung hier vollständig ist, weiß ich nicht). Diese Konstanten können nur in den bedingten #If-Abfragen als Ausdruck eingesetzt werden.
#If Win32=False then
MsgBox "Win32 erforderlich"
'Abbruchroutine des Programms
#ElseIf Mac then
Msgbox "Keine Mac-Anwendung"
'Abbruchroutine des Programms
#End If
Da jedoch keine EXE-Datei mit VBA erzeugt wird, werden die #IF-Blöcke wohl ausführungstechnisch genauso behandelt, wie normale IF-Strukturen, so dass eigentlich nur der Einsatz Nutzen bringt, wenn man die vordefinierten Komilerkonstanten verwenden muß oder aber an zentraler Stelle (Eigenschaften von VBA-Project ...) derartige Steuerkonstanten hinterlegen möchte.
#If Vba6 then
Anweisung X mit Parametern, die Vba6 kennt
#Else
Anweisung X ohne Parameter, die erst ab Vba6 möglich sind
#End If
Ansonsten scheint mir für Deinen Fall, in dem es darum geht, zwischen den verschiedenen Anwendungen, in denen Dein VBA-Project eingesetzt wird, der Weg über die bedingte Abfrage nicht geeignet zu sein, solange man keine vordefinierte Compilerkonstante kennt, die zwischen den Applikationen unterscheidet. Hier ist der von @ransi beschriebene Weg über das Objekt der richtige.
Allein das Auswählen zwischen versionsabhängigen Veränderungen bei den einzelnen Befehlen und Parametern in der Anwendung oder dem Betriebssystem ((VBA6 oder nicht VBA6, Betriebssystem) erfordert den Einsatz von #If-Strukturen, denn auch die Idee der Steuerung verschiedener Ausführungsoptionen in einem Projekt (DEMO, SPARVERSION, etc.) lassen sich mit normalen CONST-Deklarationen und IF- und SELECT-Blöcken umsetzen.
Gruß,
Uwe