Wenn in einem Netzwerk bzw. mehreren Benutzern Dateien ausgetauscht werden, kommt es immer wieder vor, dass unterschiedliche Versionen in Excel zum Einsatz kommen. Das führt dazu, dass bestimmte Funktionen nicht zur Verfügung stehen. Neu sind beispielsweise seit 2007 folgende Funktionen:

  • SUMMEWENNS
  • ZÄHLENWENNS
  • alle Funktionen des Add-in “Analyse-Funktionen”
  • MITTELWERTWENN und MITTELWERTWENNS

Ich möchte hier nur mal die beiden Funktionen ISTGERADE und ISTUNGERADE herausgreifen, und an ihnen exemplarisch demonstrieren, wie man mittels eines Add-Ins diese auch für Versionen unter 2007 (auch ohne installierten “Analyse-Funktionen”-Addin) verwenden kann. 

Funktion ISTGERADE und ISTUNGERADE

' Funktion zur Überprüfung, ob eine Zahl gerade ist
Function ISTGERADE(myZahl As Double) As Boolean
' Überprüft, ob die Zahl ohne Rest durch 2 teilbar ist
If myZahl Mod 2 = 0 Then
' Gibt True zurück, wenn die Zahl gerade ist
ISTGERADE = True
Else
' Gibt False zurück, wenn die Zahl ungerade ist
ISTGERADE = False
End If
End Function
' Funktion zur Überprüfung, ob eine Zahl ungerade ist
Function ISTUNGERADE(myZahl As Double) As Boolean
' Überprüft, ob die Zahl ohne Rest durch 2 teilbar ist
If myZahl Mod 2 = 0 Then
' Gibt False zurück, wenn die Zahl gerade ist
ISTUNGERADE = False
Else
' Gibt True zurück, wenn die Zahl ungerade ist
ISTUNGERADE = True
End If
End Function

Erläuterungen:

  • Beide Funktionen nehmen eine Double-Zahl (myZahl) als Parameter an.
  • ISTGERADE überprüft, ob myZahl durch 2 teilbar ist (d.h., ob der Rest der Division durch 2 gleich 0 ist). Ist dies der Fall, gibt die Funktion True zurück, was bedeutet, dass die Zahl gerade ist. Andernfalls gibt sie False zurück.
  • ISTUNGERADE funktioniert ähnlich, aber im umgekehrten Sinne: Wenn myZahl durch 2 teilbar ist (also gerade), gibt sie False zurück. Andernfalls, wenn die Zahl ungerade ist (der Rest der Division durch 2 ist nicht 0), gibt sie True zurück.

Anmerkung: es ginge noch kürzer, aber so sind sie leicht nachvollziehbar

Das sind zwei wirklich einfache Funktionen, die keiner näheren Erklärung benötigen. Wenn man diese beiden Funktionen in als Add-in in Versionen nach 2007 einbindet, existieren diese beiden Funktionen doppelt:

Die Funktionen zur Verfügung stellen, sofern diese noch nicht existieren

Da die doppelte Auflistung der Formeln aber nicht zielführend ist, stellt sich nun die Frage, wie man es schafft, dass die Funktionen nur in Versionen von Excel eingebunden werden, in denen die Funktionen nicht automatisch zur Verfügung stehen. 

Ob die Funktionen automatisch zur Verfügung stehen, hängt von 2 Dingen ab:

  • einerseits von der eingesetzten Excel Version (ab 2007 stehen die Funktionen allen zur Verfügung)
  • andererseits vom aktivierten Addin-AnalyseFunktionen (vor 2007 konnten diejenigen auf die Funktionen zugreifen, die das Addin AnalyseFunktionen aktiviert hatten)
Option Explicit
' Globale Variable, um festzustellen, ob nachgerüstete Funktionen benötigt werden
Public nachgeruesteteFunktionen As Boolean
' Prozedur zur Überprüfung, ob nachgerüstete Funktionen erforderlich sind
Public Sub TestnachgeruesteteFunktionen()
' Überprüft, ob die Excel-Version älter als 11 ist und das Analyse-Funktionen-Addin nicht aktiviert ist
If Application.Version < 11 And Analysefunktionen = False Then
nachgeruesteteFunktionen = True
Else
nachgeruesteteFunktionen = False
End If
End Sub
' Funktion zur Überprüfung, ob das Analyse-Funktionen-Addin aktiviert ist
Public Function Analysefunktionen() As Boolean
' Durchläuft alle installierten Add-Ins
For x As Integer = 1 To AddIns.Count
Analysefunktionen = False
Debug.Print AddIns(x).Name
' Überprüft, ob das Add-In "ANALYS32.XLL" installiert ist
If AddIns(x).Name = "ANALYS32.XLL" Then
If AddIns(x).Installed = True Then
Analysefunktionen = True
End If
End If
Next
End Function
' Bedingung für die Definition der nachgerüsteten Funktionen
#If nachgeruesteteFunktionen = True Then
' Funktion zur Überprüfung, ob eine Zahl gerade ist
Function ISTGERADE(myZahl As Double) As Boolean
If myZahl Mod 2 = 0 Then
ISTGERADE = True
Else
ISTGERADE = False
End If
End Function
' Funktion zur Überprüfung, ob eine Zahl ungerade ist
Function ISTUNGERADE(myZahl As Double) As Boolean
If myZahl Mod 2 = 0 Then
ISTUNGERADE = False
Else
ISTUNGERADE = True
End If
End Function
#End If

Erläuterungen:

  • Zuerst wird mit Option Explicit sichergestellt, dass alle Variablen deklariert werden müssen.
  • nachgeruesteteFunktionen ist eine globale Variable, die angibt, ob nachgerüstete Funktionen erforderlich sind.
  • TestnachgeruesteteFunktionen ist eine Prozedur, die überprüft, ob die Excel-Version älter als 11 ist und ob das Analyse-Funktionen-Addin nicht aktiviert ist. Ist dies der Fall, wird nachgeruesteteFunktionen auf True gesetzt.
  • Analysefunktionen ist eine Funktion, die überprüft, ob das Add-In “ANALYS32.XLL” installiert ist.
  • Die Funktionen ISTGERADE und ISTUNGERADE werden nur definiert, wenn nachgeruesteteFunktionen True ist. Sie überprüfen, ob eine übergebene Zahl gerade bzw. ungerade ist.

Jetzt muss man es nur noch bewerkstelligen, dass die Funktion “TestnachgeruesteteFunktionen” beim Start des Add-ins ausgeführt wird, damit die Variable nachgeruesteteFunktionen widerspiegelt, ob die Funktionen schon vorhanden sind, oder eben nicht.

Dafür fügt man folgenden Quellcode unter Add-in-Name \ Microsoft Excel Objekte \ DieseArbeitsmappe ein:

' Diese Subroutine wird ausgeführt, wenn das Workbook geöffnet wird
Private Sub Workbook_Open()
' Ruft die Prozedur auf, um zu prüfen, ob nachgerüstete Funktionen benötigt werden
Call TestnachgeruesteteFunktionen
End Sub