Mark befindet sich in einer Arbeitsumgebung, in der zwei Versionen von Excel 2002 und 2003 verwendet werden. Ein Problem tritt auf, wenn er eine Arbeitsmappe mit einem Makro in Excel 2003 öffnet, das die VB-Bibliothek von Office 11 installiert, und später versucht jemand, dieselbe zu öffnen Arbeitsmappe in Excel 2002, die einen Fehler ausgibt, wenn das Makro versucht, ausgeführt zu werden, weil es nicht die richtige VBA-Bibliotheksreferenz finden kann. Mark weiß, dass er dies manuell korrigieren kann, indem er zum VB-Editor wechselt und den Verweis auf die fehlende VBA-Bibliothek löscht. Er fragt sich jedoch, ob die Arbeitsmappe die Excel-Version automatisch überprüfen und die VBA-Bibliotheksreferenz entsprechend aktualisieren kann.

Eine Möglichkeit, damit umzugehen, besteht darin, die Arbeitsmappe mit der früheren Version von Excel zu erstellen und zu speichern. Wenn es in der späteren Version von Excel geöffnet wird, wird der Verweis auf die VBA-Bibliothek automatisch aktualisiert.

Excel führt die Aktualisierungen auf spätere Versionen durch, jedoch nicht auf frühere Versionen.

Dies bedeutet jedoch, dass Benutzer der früheren Version auch dann Probleme haben, die Arbeitsmappe zu öffnen, wenn sie in der früheren Version von Excel erstellt und anschließend in der späteren Version von Excel gespeichert wurde.

Nach einigen Quellen besteht die Lösung darin, auf die sogenannte „späte Bindung“ zurückzugreifen. Dies bedeutet einfach, dass das Makro so geschrieben ist, dass es nur zur Laufzeit nach bestimmten Funktionen sucht, nicht wenn das Makro gespeichert wird. Dies wird im folgenden Microsoft Knowledge Base-Artikel etwas erwähnt:

http://support.microsoft.com/?kbid=244167

Sie können späte Bindungstechniken ausprobieren, indem Sie den VBA-Editor öffnen und alle zuvor festgelegten Referenzen entfernen. Fügen Sie dann am Anfang Ihres Makros Code hinzu, der dem folgenden ähnelt:

If Application.Version = "10.0" Then    'Excel 2002     Dim oExcel As Object    'Apply late binding     Set oExcel = CreateObject("Excel.Application")

End If If Application.Version = "11.0" Then    'Excel 2003     '     ' Add whatever references you want for Excel 2003     ' End If

Stellen Sie am Ende des Makros sicher, dass Sie alle definierten Objekte (z. B. oExcel) auf Nothing setzen. Ein gutes Beispiel für Code, der robuster ist als der hier vorgestellte, finden Sie in den folgenden Artikeln:

http://www.vbaexpress.com/kb/getarticle.php?kb_id=267 http://www.vbaexpress.com/kb/getarticle.php?kb_id=272

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3340) gilt für Microsoft Excel 97, 2000, 2002 und 2003.