Das Wort zum Sonntag
16.03.2008 13:30:02
Nepumuk
jeder, der mit verschiedenen Excelversionen arbeiten muss, kennt das Problem.
In neuen Version gibt es neue Objekte, Methoden, Eigenschaften und Ereignisse. Die können in niedrigeren Versionen nicht eingesetzt werden, da VB schon beim kompilieren meckert, dass es diese oder jenes nicht kennt, oder aber während der Laufzeit ein objektorientierter Fehler auftritt.
Auf diese Features wollen wir aber auch nicht verzichten. Die bedingte Kompilierung scheidet aus, da und Excel keine Konstante für die Version zur Verfügung stellt. Für jede Version ein eigenes Programm zu schreiben vervielfacht den Wartungsaufwand und ist auch keine Lösung.
Hier mal ein paar Möglichkeiten, ohne Versionskonflikt, neue Methoden und Eigenschaften zu nutzen. Getestet mit xl2000 und xl2003.
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Public Sub Beispiel1() 'neue Parameter für Methoden
Select Case Val(Application.Version)
Case 10, 11
Columns(1).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=1 'xlSortTextAsNumbers
Case 8, 9
Columns(1).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Select
End Sub
Public Sub Beispiel2() 'neue Eigenschaften von Objekten
If Val(Application.Version) > 9 Then
CallByName Application.CommandBars, "DisableCustomize", VbLet, False
CallByName Application.CommandBars, "DisableAskAQuestionDropdown", VbLet, False
End If
Application.CommandBars("Toolbar List").Enabled = True
End Sub
Public Sub Beispiel3() 'neue Eigenschaften von Objekten die Objekte zurückgeben
If Val(Application.Version) > 9 Then Application.ErrorCheckingOptions.BackgroundChecking = False
End Sub
Public Sub Beispiel4() 'neue Methoden
If Val(Application.Version) > 9 Then Application.Windows.CompareSideBySideWith ThisWorkbook.Name
End Sub
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************
Option Explicit
Public Sub Beispiel1() 'neue Parameter für Methoden
Select Case Val(Application.Version)
Case 10, 11
Columns(1).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=1 'xlSortTextAsNumbers
Case 8, 9
Columns(1).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Select
End Sub
Public Sub Beispiel2() 'neue Eigenschaften von Objekten
If Val(Application.Version) > 9 Then
CallByName Application.CommandBars, "DisableCustomize", VbLet, False
CallByName Application.CommandBars, "DisableAskAQuestionDropdown", VbLet, False
End If
Application.CommandBars("Toolbar List").Enabled = True
End Sub
Public Sub Beispiel3() 'neue Eigenschaften von Objekten die Objekte zurückgeben
If Val(Application.Version) > 9 Then Application.ErrorCheckingOptions.BackgroundChecking = False
End Sub
Public Sub Beispiel4() 'neue Methoden
If Val(Application.Version) > 9 Then Application.Windows.CompareSideBySideWith ThisWorkbook.Name
End Sub
Es fehlen natürlich noch die grundsätzlich neuen Objekte und Ereignisse. Aber das ListObject Objekt ist meiner Meinung nach für Programmierer ziemlich uninteressant. Die neuen Ereignisse wie z.B. Sync oder XmlImport, XmlExport usw. habe ich noch nie benötigt und kann mir auch keine Einsatzgebiet dafür vorstellen.
Gruß
Nepumuk