Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Bedingte Compilierung
zurück: Tile Horizontally/Vertically weiter: Datenbankdokumentation mit VBA Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Information Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
astern
Datenmodell-Missionar


Verfasst am:
28. Okt 2010, 10:16
Rufname: Andreas
Wohnort: Rastede

Bedingte Compilierung - Bedingte Compilierung

Nach oben
       Version: (keine Angabe möglich)

Hallo!
Ich möchte hier einmal kurz meine Erfahrungen mit der bedingten Compilierung schildern. Vielleicht kann es jemand gebrauchen!?

Also: Ich entwickle Access-Datenbanken, die sowohl unter Access 2003 als auch unter Access 2007/2010 laufen sollen. Nun gibt es aber in Access 2007/2010 VBA-Befehle, die es unter Access 2003 noch gar nicht gab. Die Lösung für dieses Problem lautet in vielen Fällen: Versuche, einen Umweg zu finden, indem Du das gewünschte Verhalten mit Befehlen programmierst, die es unter Access 2003 schon gab. Manchmal geht das aber nicht, wenn es sich nämlich um ein Feature handelt, das es unter Access 2003 noch gar nicht gab - z.B. die Multifunktionsleiste (oder das "Menüband" in 2010). Ich möchte also, dass beim Start der Datenbank unter Access 2007/2010 eine Multifunktionsleiste erscheint, die es unter Access 2003 noch gar nicht gab. Das mache ich mithilfe der bedingten Compilierung folgendermaßen:

Im Autoexec-Makro gibt es als allererstes eine Aktion "AusführenCode" mit dem Argument "eigene_MFL_laden()". Diese Prozedur sieht so aus:
Code:
Public Function eigene_MFL_laden()
#If Accessversion > 2003 Then
    Application.LoadCustomUI "Eigene_MFL" _
                           , DLookup("mfl_code", "tblMFL" _
                                   , "mfl_name='eigene_MFL'")
#End If
End Function
Die Zeilen mit dem "#" davor sind spezielle Befehle für den VBA-Compiler. Das "#If ..." bewirkt, dass der Compiler nur versucht, den Befehl "Application.LoadCustomUI ..." zu übersetzen, wenn die Konstante "Accessversion" größer als 2003 ist.

Den Befehl "Application.LoadCustomUI ..." gibt es unter Access 2003 noch gar nicht. Wenn das Programm also auch unter Access 2003 auch laufen soll, müsste ich in der Access 2003-Version der Datenbank diese Zeile löschen oder zumindest in Kommentarzeichen setzen. Durch den Compiler-Befehl "#If ..." überspringt der 2003er Compiler diese Zeile aber und versucht gar nicht erst, sie zu übersetzen.

Der Wert der Konstanten "Accessversion" wird so gesetzt:
- In VBA: Extras / Eigenschaften von ...
- dort unter "Argumente für die bedingte Kompilierung"
- eintragen: Accessversion = 2007
Will man dort mehrere Konstanten definieren, so müssen sie durch Doppelpunkte voneinander getrennt werden!

Wenn ich jetzt aus meiner 2007er Version eine 2003er Version machen will, speichere ich die DB unter Access 2007 mit "Speichern unter ... Access 2002-2003 Datenbank" und ändere die Konstante "Accessversion" von "2007" auf "2003". Fertig!

Noch eine Anmerkung:
Man kann die "#"-Befehle nicht nur innerhalb einer Prozedur benutzen. Man kann damit auch ganze Prozeduren von der Compilierung ausnehmen.

Beispiel: Die Prozedur, die durch den Click in die Multifunktionsleiste aufgerufen wird, hat einen Parameter mit einem Datentyp ("IRibbonControl"), den es unter Access 2003 noch gar nicht gab. Infolgedessen kann der 2003er Compiler schon die erste Zeile dieser Prozedur nicht übersetzen. Dann nehme ich die ganze Prozedur von der Compilierung aus - d.h. das "#If ... #End If" befindet sich nicht innerhalb des Prozedurcodes, sondern "um diesen herum":
Code:
#If Accessversion > 2003 Then
Sub OnButtonClick(control As IRibbonControl)
    Select Case control.id
      Case "startformular"
        DoCmd.OpenForm "frmStart"
      Case "mitglieder"
        DoCmd.OpenForm "frmMitglieder"
      Case "mannschaften"
        DoCmd.OpenForm "frmMannschaften"
      Case "trainer"
        DoCmd.OpenForm "frmTrainer"
      Case Else
        MsgBox "OnButtonClick: Unbekannter Formularname!"
    End Select
End Sub
#End If
MfG
A*

_________________
1. Access-Gebot: Du sollst lange und gründlich über Dein Datenmodell nachdenken!
2. Access-Gebot: Du sollst keine Formulare erstellen ohne gutes Datenmodell!
Willi Wipp
Moderator


Verfasst am:
09. Apr 2011, 07:25
Rufname:
Wohnort: Raum Wiesbaden


AW: Bedingte Compilierung - AW: Bedingte Compilierung

Nach oben
       Version: (keine Angabe möglich)

{Dieser Beitrag nimmt das Thema aus den unbeantworteten Themen heraus}
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Bedingte Formatierung 1 Nils13 208 18. Mai 2011, 11:44
KlausMz Bedingte Formatierung
Keine neuen Beiträge Access Formulare: Bedingte Formatierung ABC123 1 tomi-w80 407 08. Feb 2008, 11:15
Da Oansa Bedingte Formatierung ABC123
Keine neuen Beiträge Access Formulare: Bedingte Formatierung funktioniert nicht 3 Sebi1982 1238 17. Sep 2007, 19:34
jens05 Bedingte Formatierung funktioniert nicht
Keine neuen Beiträge Access Formulare: Bedingte Formatierung 1 Imo-Parceval 509 14. Sep 2007, 17:03
JörgG Bedingte Formatierung
Keine neuen Beiträge Access Formulare: Bedingte Formatierung in Abhänigkeit vom aktuellen Monat 4 speedy666 504 13. Sep 2007, 10:53
speedy666 Bedingte Formatierung in Abhänigkeit vom aktuellen Monat
Keine neuen Beiträge Access Formulare: Bedingte Formatierung in Access 97 6 HaWo 2529 26. Jul 2007, 22:27
Willi Wipp Bedingte Formatierung in Access 97
Keine neuen Beiträge Access Formulare: Bedingte Formatierung? (anderes Feld als Kriterium) 2 Avathar 2027 12. Jul 2007, 09:48
Avathar Bedingte Formatierung? (anderes Feld als Kriterium)
Keine neuen Beiträge Access Formulare: Bedingte Formatierung bei leerem Feldinhalt 1 sebi1981 709 27. März 2007, 14:00
blicki Bedingte Formatierung bei leerem Feldinhalt
Keine neuen Beiträge Access Formulare: mehr als 3 bedingte Formatierungen 3 tk25693 1015 28. Feb 2007, 19:21
Nouba mehr als 3 bedingte Formatierungen
Keine neuen Beiträge Access Formulare: Endlos - Unterformular bedingte Formatierung geht nicht 2 Tobias1982 1317 23. Feb 2007, 10:03
Gast Endlos - Unterformular bedingte Formatierung geht nicht
Keine neuen Beiträge Access Formulare: Bedingte Formatierung im Endlosformular 6 Mark-Joachim 3441 22. Feb 2007, 02:45
Willi Wipp Bedingte Formatierung im Endlosformular
Keine neuen Beiträge Access Formulare: bedingte Formatierung 1 thw 607 17. Jan 2007, 12:43
thw bedingte Formatierung
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: HTML CSS