|
Excel - Add-Ins mit Symbolleiste
|
|
|
Autor/Einsender: Datum: |
|
Angie 03/2006 |
|
Anregungen/Tipps an: |
|
Angie
|
|
|
Add-Ins sind Programme, mit dessen Hilfe die Funktionalität von Excel erweitert und/oder individuell angepasst werden kann. Ab Excel 2000
stehen mehrere Typen von Add-In-Programmen zur Verfügung, Excel-Add-Ins (*.xla) und zusätzlich noch benutzerdefinierte Component
Object Model (COM)-Add-Ins.
|
Add-Ins sind m. E. die beste Möglichkeit Makros weiterzugeben, da hier unter anderem ein Update der Programmierung ohne größere "Klimmzüge"
wie beispielsweise das Ersetzen von Modulen, Prozeduren usw. per VBE, möglich ist. Ein weiterer Vorteil ist auch, dass nicht ein und die selbe
Programmierung in beliebig viele Arbeitsmappen verteilt wird.
|
Bei einem Excel-Add-In (*.xla) handelt es sich um eine Arbeitsmappe, die als Microsoft Excel-Add-In gespeichert wurde und ist Thema dieses
Tutorials.
|
Es wird hier davon ausgegangen, dass gute Excel-Kenntnisse und zumindest Grundkenntnisse in VBA vorhanden sind.
|
|
|
Bei Fragen zu diesem Tutorial nutzen Sie bitte unser VB-/VBA-Forum. |
|
|
Add-Ins erstellen
|
|
|
Ausgangspunkt für ein Excel-Add-In ist eine ganz normale Arbeitsmappe, in der der Quellcode in den Modulen und Klassenmodulen des VBA-Projekts
unterbracht wird. Als Add-In wird die Arbeitsmappe über den Dialog Speichern unter… im Menü Datei als Microsoft Excel-Add-In (*.xla)
gespeichert. Beim Aufruf des Dialogs Speichern unter… wird der Standardordner für Add-Ins als Speicherort vorgeschlagen, es ist jedoch
nicht zwingend erforderlich, das Add-In im Standardordner zu speichern.
|
Nach dem Speichern wird die aktuelle Arbeitsmappe als Add-In gespeichert und sofort wieder ausgeblendet, das heißt, die "normale" Arbeitsmappe
bleibt in Excel sichtbar. Um den Code im Add-In bearbeiten zu können, muss das Add-In entweder geöffnet oder zur Auflistung der Add-Ins
hinzugefügt werden.
|
Bei einem Add-In handelt es sich nicht um eine ausgeblendete Arbeitsmappe im üblichen Sinne, ein Add-In kann also nicht wie die
"persönliche Arbeitsmappe" (Personl.xls) über das Menü Fenster/Einblenden... angezeigt werden.
|
Weitere Informationen können dem Kurztipp
Add-Ins erstellen, laden und entfernen entnommen werden.
|
|
|
Verteilung/Installation eines Add-Ins
|
[ Top ]
|
|
Es gibt die verschiedensten Möglichkeiten ein Add-In zu verteilen und zu installieren. Die hier folgenden Beispiele sollen nur ein paar der
Methoden aufzeigen. Welche Methode sinnvoll ist, hängt von den verschiedensten Faktoren ab. Muss beispielsweise für ein Add-In ein Steuerelement
registriert werden, sollte das Add-In "ordentlich" installiert werden und zur Auflistung der Add-Ins (Add-Ins-Manager) hinzugefügt werden.
|
|
|
Ein Add-In kann in Excel zur Auflistung der Add-Ins, entweder manuell oder über eine Installationsroutine, hinzugefügt werden.
|
Manuell wird ein Add-In zur Auflistung der Add-Ins über das Menü Extras/Add-Ins-Manager… hinzugefügt. Falls das gewünschte Add-In nicht
im Feld Verfügbare Add-Ins aufgeführt ist, kann nach dem Add-In über den Button Durchsuchen… gesucht werden. Damit das
Add-In in Excel geladen wird, muss das Kontrollkästchen neben dem zu ladenden Add-In aktiviert werden.
|
Wird ein Add-In an unerfahrene Anwender weitergegeben, ist es sinnvoll, das Hinzufügen des Add-Ins zur Liste der verfügbaren Add-Ins per Code
vorzunehmen. Die dafür benötigten Methoden und Eigenschaften des AddIn-Objekts sind in der Excel-VB(A)-Hilfe ausführlich beschrieben.
|
|
|
Ein Add-In kann, wie jede andere Arbeitsmappe auch, manuell über das Menü Datei/Öffnen… oder per Doppelklick im Explorer geöffnet werden.
Das Add-In wird damit nicht zur Auflistung der Add-Ins (Add-In-Manager) hinzugefügt. Diese Vorgehensweise ist dann sinnvoll, wenn
keine Installation notwendig ist und das Add-In nur sporadisch verwendet wird.
|
Soll das Add-In nicht zur Auflistung der Add-Ins hinzugefügt werden, jedoch beim Starten von Excel automatisch geöffnet werden, kann das
Add-In oder eine Verknüpfung zum Add-In im Ordner XLStart abgelegt werden. Die möglichen Pfade des XLStart-Ordners können
der Excel-Hilfe entnommen werden.
|
Anmerkung: Je nachdem, wo der Anwender das Add-In gespeichert/ablegt hat und welche Makrosicherheitseinstellung gewählt ist, wird ggf. der
Dialog mit der Aufforderung die Makros zu aktivieren oder zu deaktivieren, angezeigt.
|
|
|
In einer oder mehreren Arbeitsmappen kann zur Entwurfszeit ein Verweis auf ein Add-In eingebunden werden. Damit die Beziehung zwischen den
Arbeitsmappen beibehalten wird, müssen entweder die relativen Pfade zwischen den beiden Arbeitsmappen (Add-In und "normale" Arbeitsmappe)
beibehalten werden, das Add-In vor der Arbeitsmappe geöffnet werden oder das Add-In im Standardordner für Add-Ins abgelegt sein.
|
Das Einbinden eines Verweises hat zwar den Vorteil, dass das Add-In beim Öffnen der Arbeitsmappe automatisch geladen wird, auch wenn das Add-In
nicht im Standardordner für Add-Ins abgelegt ist, es hat aber wiederum den Nachteil, dass das Add-In weder umbenannt noch verschoben werden darf.
|
Anmerkung: Je nachdem, wo der Anwender das Add-In gespeichert/ablegt hat und welche Makrosicherheitseinstellung gewählt ist, wird ggf. der
Dialog mit der Aufforderung die Makros zu aktivieren oder zu deaktivieren, angezeigt.
|
|
|
Soll ein Add-In die Funktionalität von Excel ergänzen und mit allen Arbeitsmappen verwendet werden können, wie in diesem Beispiel-Add-In,
sollten möglichst keine Änderungen in den Benutzereinstellungen und an der Excel-Oberfläche gemacht werden, damit der Anwender wie gewohnt
mit Excel arbeiten kann. Wenn Änderungen in den Einstellungen des Anwenders vorgenommen werden müssen, so sollte man dies dem Anwender auch mitteilen.
|
In diesem Add-In wird per Code eine benutzerdefinierte Symbolleiste erstellt, die mit allen Arbeitsmappen verwendet werden kann.
|
Im Add-In ist der notwendige Code enthalten, um
|
- |
eine Symbolleiste zu erstellen und die Eigenschaften wie Position und Breite aus der Registry auszulesen. |
- |
das Aktivieren/Deaktivieren der Schaltflächen auf der Symbolleiste, je nachdem, ob in Excel eine Arbeitsmappe geöffnet und ein Fenster sichtbar ist oder nicht, zu steuern. |
- |
die vom Anwender geänderten Eigenschaften der Symbolleiste in der Registry zu speichern. |
- |
den in der Registry erstellten Abschnitt wieder zu löschen. |
|
|
|
Um das Aktivieren/Deaktivieren der Schaltflächen aufzeigen zu können, je nachdem, ob eine Arbeitsmappe mit eingeblendetem Fenster geöffnet ist,
werden sowohl die in Excel integrierten Schaltflächen Datei Neu, Öffnen und Speichern als auch drei benutzerdefinierte
Schaltflächen zur neuen Symbolleiste hinzugefügt.
|
Für die in Excel integrierten Schaltflächen Datei Neu, Öffnen und Speichern wird kein Code für das Aktivieren/Deaktivieren
benötigt, das wird von Excel automatisch gesteuert. Anders sieht es jedoch aus, wenn die benutzerdefinierten Schaltflächen aktiviert/deaktiviert
werden sollen, je nachdem, ob in Excel eine Arbeitsmappe geöffnet und ein Fenster sichtbar ist oder nicht.
|
In diesem Beispiel wird der Tag-Eigenschaft der beiden benutzerdefinierten Schaltflächen, die deaktiviert werden sollen, wenn in
Excel keine Arbeitsmappe mit eingeblendetem Fenster geöffnet ist, eine "Kennung" zugewiesen. Die dritte benutzerdefinierte Schaltfläche kann
immer aktiv bleiben, da bei Klick die VB-fun.de-Startseite
angezeigt wird und somit keine Arbeitsmappen-spezifische Aktion ausgelöst wird.
|
Schaltflächen auf Symbolleisten können mit einer Beschriftung belegt werden und/oder mit Symbolen. Der dritten benutzerdefinierten Schaltfläche
wird ein eigenes Symbol zugewiesen. Das Symbol wurde zur Entwurfszeit in einem Tabellenblatt im Add-In als Grafik eingefügt und mit einem Namen
versehen (siehe dazu auch unseren Tipp Symbolleiste - eigene Grafiken integrieren -2-). Die in einem Add-In
enthaltenen Tabellenblätter sind zwar für den Anwender nicht sichtbar, ein Zugriff darauf ist jedoch per Code trotzdem möglich, allerdings ohne
Verwendung der Methoden Select und Activate!
|
|
|
Public Sub CreateCommandBar()
Dim objCBar As Office.CommandBar
Dim strOnAction As String
DeleteCommandBar
On Error GoTo err_CreateCommandBar
Set objCBar = ThisWorkbook.Application.CommandBars.Add( _
Name:=gcCBAR_NAME, Temporary:=True)
strOnAction = "'" & ThisWorkbook.Name & "'!modOnAction."
With objCBar
.Controls.Add ID:=2520
.Controls.Add ID:=23
.Controls.Add ID:=3
With .Controls.Add(Type:=msoControlButton)
.BeginGroup = True
.Style = msoButtonCaption
.Caption = "Demo Button 1"
.Tag = gcCBARBTN_TAG
.OnAction = strOnAction & "OnAction_DemoAddIn_11"
End With
With .Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "Demo Button 2"
.Tag = gcCBARBTN_TAG
.OnAction = strOnAction & "OnAction_DemoAddIn_12"
End With
With .Controls.Add(Type:=msoControlButton)
.BeginGroup = True
.Style = msoButtonIcon
.FaceId = 3021
.Parameter = "http://www.vb-fun.de"
.TooltipText = "VB-fun-Startseite"
.OnAction = strOnAction & "OnAction_GoToVBfun_13"
On Error Resume Next
TCBarPics.Shapes("picVBFun").CopyPicture
If Err.Number = 0 Then
.PasteFace
End If
On Error GoTo 0
End With
.Position = msoBarTop
.Visible = True
.Protection = msoBarNoCustomize
End With
exit_Sub:
On Error Resume Next
Set objCBar = Nothing
On Error GoTo 0
Exit Sub
err_CreateCommandBar:
MsgBox "Es ist ein Fehler bei der Erstellung der neuen " & _
vbCrLf & "Symbolleiste aufgetreten !", vbCritical, _
gcAPP_NAME & " - Fehler"
DeleteCommandBar
Resume exit_Sub
End Sub
|
|
|
Anmerkungen zur OnAction-Eigenschaft |
|
Mit der OnAction-Eigenschaft wird der Name des Makros festgelegt, das ausgeführt wird, wenn der Anwender auf eine Schaltfläche
auf einer Symbolleiste klickt.
|
Auch wenn die auszuführende Prozedur mit der OnAction-Eigenschaft vollständig mit Datei-, Modul- und Prozedurnamen zugewiesen wird,
wird unter Umständen eine "falsche" Prozedur ausgeführt.
|
Eine "falsche" Prozedur wird dann aufgerufen, wenn bereits ein anderes Add-In (*.xla) geladen oder eine "normale"
Arbeitsmappe (*.xls) geöffnet ist, in der sich zufällig sowohl ein Modul als auch eine Prozedur mit den selben Namen befinden.
|
Bei Add-Ins mit selben Modul- und Prozedurnamen wird immer die Prozedur von dem Add-In ausgeführt, das als Erstes in Excel geladen wurde.
|
Befindet sich in einer "normalen" Arbeitsmappe ein Modul und in diesem eine Prozedur mit dem selben Namen, so wird immer (!) die Prozedur
ausgeführt, die sich in der "normalen" Arbeitsmappe befindet.
|
Das kann leicht mit diesem Beispiel-Add-In nachvollzogen werden. Zunächst wird das Add-In in Excel geladen, und anschließend der folgende Code in ein
Modul (Name modOnAction) in einer "normalen" Arbeitsmappe (diese muss noch nicht mal gespeichert werden) kopiert. Bei Klick auf die Schaltfläche
auf der Symbolleiste wird die Prozedur ausgeführt, die sich in der "normalen" Arbeitsmappe befindet.
|
|
|
Option Explicit
Option Private Module
Private Sub OnAction_DemoAddIn_11()
MsgBox ThisWorkbook.Name
End Sub
|
|
|
Löscht oder deaktiviert man den Code in der "normalen" Arbeitsmappe, wird, obwohl das Add-In nach wie vor geladen ist, bei Klick auf die Schaltfläche
die Fehlermeldung
|
Microsoft Excel kann das Makro 'modOnAction.OnAction_DemoAddIn_11' nicht finden.
|
ausgegeben. Die eigentlich ursprünglich zugewiesene Prozedur im Add-In wird erst dann wieder automatisch (!) ausgeführt, wenn die "normale"
Arbeitsmappe geschlossen wird. Es nützt leider nichts, das OnAction-Makro als privat zu deklarieren, auch nicht mit Hilfe der
Option Private Module-Anweisung.
|
Es gibt noch mehr Varianten zum Thema, welche OnAction-Prozedur wann ausgeführt wird, auf diese wird hier jedoch nicht näher eingegangen.
|
Die einfachste Lösung, die mir bekannt ist, damit es in diesem Zusammenhang keine Konflikte gibt, ist einen Prozedurnamen zu wählen,
der hoffentlich (!) einmalig ist.
|
|
Ereignisse des CommandBar-Objekts vs. OnAction-Eigenschaft |
|
Ab Office 2000 stehen Ereignisse für Symbolleisten und -Steuerelemente zur Verfügung. Wie die Ereignisse des Application-Objekts müssen
auch die Ereignisse des CommandBar-Objekts zuerst eingerichtet werden, bevor sie genutzt werden können.
|
Besondere Vorteile bzgl. der Verwendung der Ereignisse des CommandBar-Objekts sind m. E. nicht gegeben. Im Gegensatz zu den
OnAction-Makros sind beispielsweise nur für zwei Steuerelemente Ereignisse möglich, für die "normale" Schaltfläche
(msoControlButton) und für Kombinationsfelder (msoControlComboBox), die zahlreichen weiteren Steuerelemente werden nicht unterstützt.
Ein Vorteil ist, dass bei den beiden genannten Steuerelementen auf das Standardverhalten Einfluss genommen werden kann. Eine großer Nachteil ist,
dass eine Programmierung, in der die Ereignisse des CommandBar-Objekts verwendet werden, nicht Excel 97- (bzw. Office 97-) kompatibel ist.
|
Die Ereignisse des CommandBar-Objekts werden üblicherweise in Com-Add-Ins und ggf. bei der Automatisierung von Excel (bzw. Office)
von VB aus.
|
|
|
Symbolleisteneinstellungen speichern
|
[ Top ]
|
|
Wenn in einem Add-In Symbolleisten zur Verfügung gestellt werden, ist es für den Anwender angenehm, wenn er diese beim Neustart von Excel dort
wieder findet, wo er sie in der letzten Excel-Sitzung abgelegt hat.
|
Die benötigten Informationen könnten in einer so genannten Initialisierungsdatei (*.ini) gespeichert werden. Problematisch ist in dem Fall,
zu bestimmen, wo solche Dateien am sinnvollsten abgelegt werden sollten. In vielen Unternehmen werden die Schreibrechte der Anwender sehr
eingegrenzt, im Ordner Anwendungsdaten des aktuellen Benutzers dürfte es die wenigsten Probleme geben.
|
Eine andere Möglichkeit ist, wie in diesem Beispiel, die Einstellungen in der Windows-Registrierung (Registry) unter
|
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\
|
zu speichern.
|
Für den Zugriff auf die Registry können entweder die entsprechenden API-Funktionen verwendet werden, oder aber auch die in VBA integrierten
Methoden GetSetting, SaveSetting und DeleteSetting. Der Syntax und die ausführliche Beschreibung zu
den genannten Methoden kann der Excel-VB(A)-Hilfe entnommen werden.
|
|
|
Mit der Funktion GetSetting werden ggf. bereits gespeicherte Einstellungen wie Position und Breite der Symbolleiste aus der
Registry ausgelesen. Wird das Add-In zum ersten Mal geladen, werden die angegebenen Default-Werte verwendet, da noch keine Werte in der
Registry gespeichert sind.
|
Um die Einstellungen ggf. aus der Registry auslesen zu können, wird der Code in der Prozedur zum Erstellen der Symbolleiste entsprechend geändert.
|
|
|
With objCBar
.Width = CInt(GetSetting( _
gcREG_APP, gcREG_TOOLBAR, "Width", .Width))
.Position = CLng(GetSetting( _
gcREG_APP, gcREG_TOOLBAR, "Position", msoBarTop))
.Top = CLng(GetSetting(gcREG_APP, gcREG_TOOLBAR, "Top", .Top))
.Left = CLng(GetSetting( _
gcREG_APP, gcREG_TOOLBAR, "Left", .Left))
.RowIndex = CLng(GetSetting( _
gcREG_APP, gcREG_TOOLBAR, "RowIndex", .RowIndex))
.Visible = CBool(GetSetting( _
gcREG_APP, gcREG_TOOLBAR, "Visible", -1))
.Protection = msoBarNoCustomize
End With
|
|
|
|
Die SaveSetting-Anweisung speichert oder erstellt einen Eintrag einer Anwendung in der Registry.
|
Mit der folgenden Prozedur werden die ggf. vom Anwender geänderten Eigenschaften der Symbolleiste, wie Position und Breite, in der Registry gespeichert.
|
|
|
Private Sub AddIn_SaveSettings()
Dim objCBar As Office.CommandBar
Dim lngPosition As Long
Dim blnVisible As Boolean
On Error Resume Next
Set objCBar = ThisWorkbook.Application.CommandBars(gcCBAR_NAME)
If Not objCBar Is Nothing Then
With objCBar
lngPosition = .Position
blnVisible = .Visible
SaveSetting gcREG_APP, gcREG_TOOLBAR, "Visible", _
CLng(.Visible)
SaveSetting gcREG_APP, gcREG_TOOLBAR, "Position", .Position
SaveSetting gcREG_APP, gcREG_TOOLBAR, "Top", .Top
SaveSetting gcREG_APP, gcREG_TOOLBAR, "Left", .Left
SaveSetting gcREG_APP, gcREG_TOOLBAR, "RowIndex", .RowIndex
.Visible = False
.Position = msoBarFloating
SaveSetting gcREG_APP, gcREG_TOOLBAR, "Width", .Width
.Position = lngPosition
.Visible = blnVisible
End With
Set objCBar = Nothing
End If
On Error GoTo 0
End Sub
|
|
|
|
Mit der DeleteSetting-Anweisung wird ein Abschnitt oder eine Schlüsseleinstellung aus einem Eintrag einer Anwendung in der Registry gelöscht.
|
In diesem Add-In werden die Regsitry-Einträge ggf. komplett gelöscht, wenn das Add-In deinstalliert wird, also aus der Auflistung der Add-Ins
entfernt wird.
|
|
|
Public Sub AddIn_DeleteRegSettings()
On Error Resume Next
DeleteSetting gcREG_APP
On Error GoTo 0
End Sub
|
|
|
|
Schaltflächen aktivieren/deaktivieren
|
[ Top ]
|
|
Unter "normalen" Bedingungen können bei Fensterwechsel die Schaltflächen entsprechend aktiviert bzw. deaktiviert werden, je nachdem,
ob eine Arbeitsmappe geöffnet und ein Fenster sichtbar ist oder nicht. Unter welchen Bedingung beispielsweise die Funktionalität nicht gegeben ist,
kann unter Fenster in Taskleiste (ab Excel 2000) nachgelesen werden.
|
|
Anzahl eingeblendeter Fenster ermitteln |
|
Wenn für eine Aktion einer benutzerdefinierten Schaltfläche eine Arbeitsmappe mit eingeblendetem Fenster benötigt wird, ist das Ermitteln
der Anzahl der geöffneten Arbeitsmappen nicht ausreichend. Arbeitsmappen können über ein oder mehrere Fenster verfügen, die teilweise oder
auch alle ausgeblendet sein können. Es ist also in dem Fall sinnvoll, eingeblendete/sichtbare Fenster als Kriterium für das Aktivieren
von Schaltflächen zu verwenden. Die folgende Funktion gibt die Anzahl der in Excel eingeblendeter Fenster zurück.
|
|
|
Public Function GetVisibleWkbWindows() As Long
Dim objWnd As Window
Dim nWndsCnt As Long
For Each objWnd In Application.Windows
If objWnd.Visible = True Then
nWndsCnt = nWndsCnt + 1
End If
Next
GetVisibleWkbWindows = nWndsCnt
End Function
|
|
|
Die Funktion zum Ermitteln der Anzahl der eingeblendeten Fenster sollte vorsichtshalber auch in den OnAction-Prozeduren der
entsprechenden Schaltflächen enthalten sein, da die Ereignisse WindowDeactivate und WindowActivate des
Application-Objekts nicht unbedingt immer "ordnungsgemäß" ausgeführt werden.
Siehe dazu beispielsweise die Ausführungen unter Fenster in Taskleiste (ab Excel 2000).
|
|
|
Sub OnAction_Demo()
If GetVisibleWkbWindows > 0 Then
'...
End If
End Sub
|
|
|
Ereignisse des Application-Objekts |
|
Mit den Ereignissen WindowDeactivate und WindowActivate des Application-Objekts kann der Einsatz
der benutzerdefinierten Schaltflächen auch beschränkt werden.
|
Um auf die Ereignisse Application-Objekts reagieren zu können, wird in diesem Beispiel ein neues Klassenmodul erstellt
und mit dem Schlüsselwort WithEvents ein Objekt vom Typ Application deklariert.
|
|
|
Private WithEvents meXLAppl As Excel.Application
|
|
|
Im Initialize-Ereignis des Klassenmoduls, das automatisch ausgeführt wird, wenn das Objekt geladen wird, wird der Objektverweis
auf die Excel-Anwendung gesetzt.
|
|
|
Private Sub Class_Initialize()
Set meXLAppl = Excel.Application
End Sub
|
|
|
Um die Schaltflächen auf der benutzerdefinierte Symbolleiste aktivieren/deaktivieren zu können, je nachdem, ob eine Arbeitsmappe geöffnet
und ein Fenster eingeblendet ist oder nicht, wird eine kleine Prozedur benötigt, die unter anderem in den beiden Ereignissen
WindowActivate und WindowDeactivate aufgerufen wird.
|
In der Prozedur werden nur die Schaltflächen aktiviert/deaktiviert, denen bei der Erstellung der Symbolleiste die entsprechende
Tag-Eigenschaft zugewiesen wurde.
|
|
|
Private Sub ToggleCBarButtons(ByVal fEnable As Boolean)
Dim objCBar As Office.CommandBar
Dim i As Integer
On Error Resume Next
Set objCBar = ThisWorkbook.Application.CommandBars(gcCBAR_NAME)
If Not objCBar Is Nothing Then
For i = 1 To objCBar.Controls.Count
If InStr(1, objCBar.Controls(i).Tag, gcCBARBTN_TAG) > 0 Then
objCBar.Controls(i).Enabled = fEnable
End If
Next
Set objCBar = Nothing
End If
On Error GoTo 0
End Sub
|
|
|
Im WindowActivate-Ereignis, das eintritt, wenn ein Arbeitsmappenfenster aktiviert wird, werden die benutzerdefinierten Schaltflächen aktiviert.
|
|
|
Private Sub meXLAppl_WindowActivate(ByVal Wb As Workbook, _
ByVal Wn As Window)
ToggleCBarButtons True
End Sub
|
|
|
Im WindowDeactivate-Ereignis, das eintritt, wenn ein Arbeitsmappenfenster deaktiviert wird, werden die benutzerdefinierten Schaltflächen immer deaktiviert.
|
|
|
Private Sub meXLAppl_WindowDeactivate(ByVal Wb As Workbook, _
ByVal Wn As Window)
ToggleCBarButtons False
End Sub
|
|
|
Da direkt nach dem Laden/Öffnen eines Add-Ins nicht unbedingt ein Fensterwechsel stattfindet, muss das Initialize-Ereignis noch mit
dem Aufruf der Prozedur zum Aktivieren/Deaktivieren der benutzerdefinierten Schaltflächen ergänzt werden.
|
|
|
Private Sub Class_Initialize()
Set meXLAppl = Excel.Application
ToggleCBarButtons CBool(GetVisibleWkbWindows > 0)
End Sub
|
|
|
Will man auf Nummer sicher gehen, dass das Add-In zumindest anfangs "ordnungsgemäß" funktioniert (man weiß ja nie), kann man im
Initialize-Ereignis auch die entsprechenden Eigenschaften des Application-Objekts vorsichtshalber zurücksetzen.
|
|
|
With Application
.ScreenUpdating = True
.DisplayAlerts = True
.EnableEvents = True
.EnableCancelKey = xlInterrupt
.Cursor = xlDefault
End With
|
|
|
Fenster in Taskleiste (ab Excel 2000) |
|
Ab Excel 2000 kann für jede geöffnete Arbeitsmappe eine eigene Schaltfläche auf der Windows-Taskleiste angezeigt werden. Mit der Einstellung
Fenster in Taskleiste wird das Aussehen einer Oberfläche für eine einzelne Arbeitsmappe simuliert, wodurch die Navigation zwischen
geöffneten Arbeitsmappen erleichtert wird. Es ist damit auch möglich, mit der Tastenkombination Alt+TAB zwischen den Arbeitsmappenfenstern
hin- und herzuwechseln.
|
Diese Neuerung ab Excel 2000 bringt jedoch leider auch "Probleme" mit sich. Ist beispielsweise in einer Arbeitsmappe ein eingebettetes Diagramm
selektiert, wird unter Umständen weder das WindowDeactivate- noch das WorkbookDeactivate-Ereignis des
Application-Objekts, das auch verwendet werden könnte, ausgelöst, wenn die Arbeitsmappe über die Taskleiste
deaktiviert wird. Auch das Activate-Ereignis der Arbeitsmappe die aktiviert wird, wird nicht ausgelöst. Sind mehrere eingebetteten
Diagramme ausgewählt, wird das Deactivate-Ereignis wiederum ausgelöst.
|
Theoretisch wäre es zwar möglich, die in den Arbeitsmappen vorhandenen eingebetteten Diagramm-Objekte zu ermitteln und dann auf das
Deactivate-Ereignis der Chart-Objekte zu reagieren. Den Programmieraufwand kann man sich m. E. jedoch sparen, da ohne einem
Timer nicht festgestellt werden kann, ob der Anwender eventuell ein neues eingebettetes Diagramm erstellt hat.
|
Abgesehen von der hier geschilderten Problematik mit eingebetteten Diagrammen scheint es so zu sein, dass die erwähnten Ereignisse überhaupt in
Excel 2000 erst ab Service Pack 3 ausgelöst werden, siehe dazu den Artikel
XL2000: ALT+TAB Does Not Trigger Workbook_WindowActivate Event.
|
Mit der OnWindow-Eigenschaft kann festgelegt werden kann, welche Prozedur ausgeführt werden soll, wenn ein Fenster aktiviert wird.
Aber auch die OnWindow-Eigenschaft, die an sich funktionieren würde, schafft leider keine Abhilfe. Legt man beispielsweise in zwei Add-Ins
unterschiedliche Prozeduren fest, so wird in Excel immer die Prozedur von dem Add-In ausgeführt, das als Letztes geladen wurde. Das heißt, es kann
scheinbar nur eine OnWindow-Eigenschaft pro Excel-Instanz festgelegt werden.
|
Die wohl einfachste und m. E. auch vertretbare Lösung ist die Option Fenster in Taskleiste zu deaktivieren, wenn sie aktiviert ist.
Das Wiederherstellen dieser Excel-Einstellung beim Schließen des Add-Ins ist jedoch nicht sinnvoll, da es durchaus sein könnte, dass ein anderes
Add-In geladen ist, in dem die Option auch deaktiviert wurde.
|
In diesem Beispiel wird dem Anwender ein Dialog mit dem Hinweis angezeigt, dass die Option Fenster in Taskleiste deaktiviert sein muss
und ggf. auch deaktiviert wird, wenn der Dialog geschlossen wird. Im Dialog kann der Anwender wählen, ob der Dialog beim nächsten Start des Add-Ins
wieder angezeigt werden soll oder nicht. Die Einstellung wird in der Registry gespeichert.
|
Sollte der Anwender auf die Idee kommen, die Option doch wieder zu aktivieren, so kann bei "guter" Programmierung eigentlich nichts
schief gehen,
siehe dazu die OnAction-Makros. Theoretisch könnte man auch ganz auf das Aktivieren/Deaktivieren der Steuerelemente auf der Symbolleiste
verzichten.
|
|
|
Private Sub AddIn_GetSettings()
#If VBA6 Then
Dim blnShowDialog As Boolean
blnShowDialog = CBool(GetSetting( _
gcREG_APP, gcREG_STARTUP, "ShowDialog", -1))
If blnShowDialog = True Then
Dim strMsg As String
Dim frmDialog As FrmStartup
strMsg = "Für dieses Add-In muss die Option " & _
"'Fenster in Taskleiste' im " & _
"Menü Extras / Optionen... / Ansicht " & _
"deaktiviert werden." & vbCrLf & vbCrLf
If Application.ShowWindowsInTaskbar = True Then
strMsg = strMsg & "> Die Option wird bei OK deaktiviert! <"
Else
strMsg = strMsg & "> Die Option ist bereits deaktiviert! <"
End If
Set frmDialog = New FrmStartup
With frmDialog
.gInit = True
.gMessage = strMsg
.Show
DoEvents
SaveSetting gcREG_APP, gcREG_STARTUP, "ShowDialog", _
CLng(.gShowDialog)
End With
Unload frmDialog
Set frmDialog = Nothing
End If
Application.ShowWindowsInTaskbar = False
#End If
End Sub
|
|
|
In Excel 97 wird der Dialog nie angezeigt, da die Option Fenster in Taskleiste nicht implementiert ist. Damit das Add-In
Excel 97-kompatibel bleibt, wird bedingte Kompilierung verwendet, um den Code abhängig von der
VBA-Version auszuführen.
|
|
|
Anbinden des Add-Ins an Excel
|
[ Top ]
|
|
Um beim Installieren, Deinstallieren, Öffnen und Schließen eines Add-Ins notwendige Einstellungen, wie z. B. das Erstellen der Symbolleiste,
automatisch ausführen zu können, stehen verschiedene Ereignisse des Workbook-Objekts zur Verfügung.
|
Wird ein Add-In lediglich, wie jede andere Arbeitsmappe auch, manuell über das Menü Datei/Öffnen… oder per Doppelklick im Explorer geöffnet,
werden die Open- und BeforeClose-Ereignisse des Workbook-Objekts ausgeführt. Beim Hinzufügen und Entfernen
des Add-Ins aus der Auflistung der Add-Ins über den Add-In-Manager werden zusätzlich die AddinInstall- und
AddinUninstall-Ereignisse ausgeführt.
|
|
|
Das AddinInstall-Ereignis tritt ein, wenn die Arbeitsmappe als Add-In installiert wird, d. h., zur Auflistung der Add-Ins im
Add-In-Manager hinzugefügt und installiert wird.
|
|
|
Private Sub Workbook_AddinInstall()
'...
End Sub
|
|
|
Im AddinInstall-Ereignis, das vor dem Open-Ereignis ausgeführt wird, kann Code hinzugefügt werden, das beim Installieren des
Add-Ins über den Dialog Add-Ins-Manager oder per VBA einmalig ausgeführt werden soll. Wird Excel nach der Installation des Add-Ins
geschlossen und neu gestartet, wird das AddinInstall-Ereignis nicht mehr ausgeführt.
|
Für dieses Beispiel wird das AddinInstall-Ereignis nicht benötigt.
|
|
|
Das Open-Ereignis tritt ein, wenn die Arbeitsmappe geöffnet wird.
|
|
|
Private Sub Workbook_Open()
AddIn_Initialize
End Sub
|
|
|
Im Open-Ereignis, das bei jedem Öffnen des Add-Ins ausgeführt wird, wird die Prozedur aufgerufen, in der die Symbolleiste erstellt wird,
ggf. bereits vorhandene Add-In-Einstellungen aus der Registry ausgelesen werden und der globalen Variable eine neue Instanz des Klassenobjekts
mit den Ereignissen des Application-Objekts zugewiesen wird.
|
|
|
Public Sub AddIn_Initialize()
CreateCommandBar
AddIn_GetSettings
If gCAppEvents Is Nothing Then
Set gCAppEvents = New CAppEvents
End If
End Sub
|
|
|
|
Das AddinUninstall-Ereignis tritt ein, wenn die Arbeitsmappe als Add-In über den Dialog Add-Ins-Manager deinstalliert wird.
Das Ereignis wird also nicht automatisch beim Beenden von Excel ausgeführt.
|
|
|
Private Sub Workbook_AddinUninstall()
m_blnAddInUninstall = True
AddIn_Uninstall
End Sub
|
|
|
Beim Entladen des Add-Ins wird zunächst ein Flag gesetzt, damit im BeforeClose-Ereignis bekannt ist, dass das AddinUninstall-Ereignis
ausgeführt wurde.
Anschließend wird die Prozedur zum Deinstallieren des Add-Ins aufgerufen, die mit der Prozedur identisch ist, die im BeforeClose-Ereignis
ausgeführt wird, jedoch mit dem Unterschied, dass die Symbolleiste und ggf. auch die Registry-Einträge gelöscht werden.
|
Wird ein Add-In im Add-Ins-Manager deaktiviert, kann man davon ausgehen, dass dies ganz bewusst vom Anwender so gewollt ist. Nachdem es aber
durchaus sein kann, dass ein Anwender das Add-In im Add-Ins-Manager nur für die aktuelle Excel-Sitzung deaktivieren möchte, also lediglich
den Haken des Kontrollkästchens entfernen, jedoch nicht das Add-In komplett deinstallieren will, wird vor dem Löschen der Registry-Einträge
eine Abfrage eingefügt.
|
|
|
Public Sub AddIn_Uninstall()
AddIn_Terminate
If MsgBox("Sollen die Registry-Einträge für dieses " & _
"Add-In gelöscht werden?", vbYesNo + vbQuestion, _
gcAPP_NAME) = vbYes Then
AddIn_DeleteRegSettings
End If
DeleteCommandBar
End Sub
|
|
|
|
Das BeforeClose-Ereignis tritt ein, wenn die Arbeitsmappe geschlossen wird. Bei der Deinstallation eines Add-Ins über den Dialog
Add-Ins-Manager, wird zuerst das AddinUninstall-Ereignis ausgeführt und anschließend das BeforeClose-Ereignis.
|
|
|
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not m_blnAddInUninstall Then
AddIn_Terminate
If Application.Workbooks.Count > 0 Then
Application.OnTime Now, "'" & ThisWorkbook.Name & _
"'!AddIn_OnShutdown"
End If
End If
End Sub
|
|
|
Im BeforeClose-Ereignis wird, wenn das Add-In nicht vorher bereits über den Dialog Add-Ins-Manager deinstalliert wurde,
die Prozedur aufgerufen, in der die Ereignisse des Application-Objekts terminiert und die Symbolleisteneinstellungen
in der Registry gespeichert werden.
|
|
|
Public Sub AddIn_Terminate()
Set gCAppEvents = Nothing
AddIn_SaveSettings
End Sub
|
|
|
Ein explizites Löschen der Symbolleiste im BeforeClose-Ereignis (im Gegensatz zum AddinUninstall-Ereignis) ist in diesem Beispiel
nicht notwendig. Wird eine benutzerdefinierte Symbolleiste mit dem Parameter Temporary:=True erstellt, wird sie
automatisch gelöscht, wenn die Containeranwendung, hier Excel, geschlossen wird.
|
Anmerkung zur OnTime-Methode
|
Wird bei Aufruf der OnTime-Methode der Name der Arbeitsmappe, in der sich die auszuführende Prozedur befindet, nicht angegeben,
so wird evtl. eine "falsche" Prozedur ausgeführt. Eine "falsche" Prozedur wird beispielsweise dann ausgeführt, wenn zwei Add-Ins (*.xla)
im selben Ordner abgelegt sind, in beiden Add-Ins eine Prozedur mit dem selben Namen enthalten ist und beide Add-Ins in Excel geladen sind.
In dem Fall wird die Prozedur ausgeführt, die sich in dem Add-In befindet, das als Erstes geladen wurde.
|
|
Schließen der Excel-Anwendung |
|
Beim Schließen von Excel werden zunächst nacheinander die ggf. vorhandenen BeforeClose-Ereignisse geladener Add-Ins ausgeführt (die
Add-Ins werden nicht sofort geschlossen, außer sie werden explizit über den Add-Ins-Manager deaktiviert) und erst anschließend werden ggf. die
Aufforderungen bezüglich Speichern nicht gespeicherter Arbeitsmappen angezeigt. Bricht der Anwender den Schließvorgang von Excel ab, soll hier
das noch in Excel geöffnete Add-In wieder initialisiert werden.
|
Im BeforeClose-Ereignis wird das Schließen von Excel mit Hilfe der OnTime-Methode "überwacht", aber nur wenn mindestens eine Arbeitsmappe
noch in Excel geöffnet ist. Die in der OnTime-Methode angegebene Prozedur wird nicht ausgeführt, wenn Excel tatsächlich geschlossen wird.
Dieser Umstand kann verwendet werden, um die Ereignisse des Application-Objekts wieder zu initialisieren, wenn der Schließvorgang
von Excel vom Anwender abgebrochen wird, z. B. in dem er eine Speicherabfrage mit Abbrechen quittiert.
|
|
|
Public Sub AddIn_OnShutdown()
If gCAppEvents Is Nothing Then
Set gCAppEvents = New CAppEvents
End If
End Sub
|
|
|
Nachdem die Symbolleiste in diesem Beispiel nicht gelöscht wird, reicht es hier aus, das Klassenobjekt mit den Ereignissen des
Application-Objekts neu zu initialisieren.
|
|
|
Add-In nur für gewisse Arbeitsmappen
|
[ Top ]
|
|
Soll ein Add-In nur für gewisse Arbeitsmappen genutzt werden können, gibt es verschiedene Möglichkeiten das zu realisieren,
entweder die Excel-Anwendung "komplett zu übernehmen", oder aber keine oder nur kleine Änderungen an der Excel-Oberfläche vorzunehmen,
wie im ersten Beispiel-Add-In.
|
Als Grundlage für dieses zweite Beispiel dient das Add-In mit eigener Symbolleiste, das für alle Arbeitsmappen verwendet werden kann.
Es sind lediglich ein paar Änderungen und Ergänzungen notwendig. Im Folgenden werden auch nur diese Änderungen und Ergänzung beschrieben.
|
Mit dem Add-In sollen nur bestimmte Arbeitsmappen bearbeitet werden, die vom Add-In erstellte Symbolleiste soll jedoch in Excel immer
sichtbar sein, solange das Add-In geladen ist. Das heißt, auch in diesem Beispiel werden keinen größeren Änderungen an der Excel-Oberfläche
vorgenommen, und der Anwender kann wie gewohnt in Excel arbeiten.
|
Als Basis für die Arbeitsmappen (*.xls), die mit dem Add-In bearbeitet werden sollen, wird eine so genannte Mustervorlage (*.xlt)
verwendet. Damit die entsprechenden Arbeitsmappen vom Add-In erkannt werden und die Schaltflächen auf der Symbolleiste aktiviert werden können,
wird eine "Kennung" benötigt. Dafür wurde in der Vorlage in den benutzerdefinierten Dokumenteigenschaften der Name des Add-Ins
(dieser muss nicht identisch mit dem (Datei-)Namen des Add-Ins sein) und die Version gespeichert. Im Add-In selbst sind die Angaben als
globale Konstanten deklariert. Wird eine neue Arbeitsmappe (*.xls) auf Basis der Vorlage (*.xlt) erstellt, werden die
Dokumenteigenschaften automatisch übernommen.
|
Damit das Add-In automatisch geladen wird, wenn eine zu bearbeitende Arbeitsmappe geöffnet wird, könnte man in den Arbeitsmappen selbst
einen Verweis zum Add-In einbinden, oder aber auch im Open-Ereignis prüfen, ob das Add-In in der Auflistung der Add-Ins enthalten ist.
|
Ein Nachteil beider genannter Methoden ist, dass das Add-In immer mit der Arbeitsmappe weitergegeben werden muss. In der Praxis gibt es
jedoch durchaus die Konstellation, dass eine Arbeitsmappe von einer Stelle bearbeitet und dann komplett ohne Programmierung weitergegeben wird.
Immer wieder werden im Forum Fragen gestellt, wie man beispielsweise zur Laufzeit einen Verweis aus einer Arbeitsmappe entfernen oder Code
löschen kann. Das ist natürlich möglich, es ist jedoch sinnvoller, von Haus aus keine Programmierung in den Arbeitsmappen einzufügen.
|
Hier wird also davon ausgegangen, dass dem Anwender bekannt ist, dass er zur Bearbeitung der Arbeitsmappen ein Add-In benötigt und dieses von
ihm selbstständig in Excel geladen wird. In diesem Beispiel müssen das Add-In und die Vorlage im selben Ordner abgelegt sein.
|
|
|
Schaltflächen aktivieren/deaktivieren
|
[ Top ]
|
|
Um die Schaltflächen auf der benutzerdefinierte Symbolleiste aktivieren/deaktivieren zu können, je nachdem, ob eine Arbeitsmappe mit
Add-In-Kennung geöffnet und ein Fenster eingeblendet ist oder nicht, wird der Code im Klassenmodul mit den Ereignissen des
Application-Objekts aus dem ersten Beispiel mit zwei Funktionen ergänzt.
|
Mit der folgenden Funktion wird ermittelt, ob in der angegebenen Arbeitsmappe die AddIn-Kennung in den benutzerdefinierten
Dokumenteigenschaften vorhanden ist.
|
|
|
Private Function HasDocProperty(Optional ByRef Wb As Workbook) _
As Boolean
Dim varDPValue As Variant
On Error Resume Next
If Wb Is Nothing Then
Set Wb = Application.ActiveWorkbook
End If
If Not Wb Is Nothing Then
varDPValue = Trim$(Wb.CustomDocumentProperties(gcAPP_NAME))
If varDPValue = gcAPP_VERSION Then
HasDocProperty = True
End If
End If
exit_Func:
On Error GoTo 0
End Function
|
|
|
Die Funktion zur Überprüfung der Dokumenteigenschaften kann in den verschiedensten Ereignissen aufgerufen werden. Hier wird beispielsweise
im Ereignis WindowActivate die Prozedur zum Aktivieren/Deaktivieren der entsprechenden Schaltflächen aufgerufen.
|
|
|
Private Sub meXLAppl_WindowActivate(ByVal Wb As Workbook, _
ByVal Wn As Window)
ToggleCBarButtons HasDocProperty(Wb)
End Sub
|
|
|
Da direkt nach dem Laden/Öffnen eines Add-Ins nicht unbedingt ein Fensterwechsel stattfindet, muss das Initialize-Ereignis noch mit
dem Aufruf der Prozedur zum Aktivieren/Deaktivieren der benutzerdefinierten Schaltflächen ergänzt werden.
|
Im ersten Beispiel-Add-In wurde lediglich geprüft, ob überhaupt eine Arbeitsmappe geöffnet und ein Fenster eingeblendet ist. Soll ein Add-In
nur für bestimmte Arbeitsmappen verwendet werden, ist es wichtig zu wissen, ob es sich bei der in Excel ggf. aktiven Arbeitsmappe um eine
Arbeitsmappe mit Add-In-Kennung handelt.
|
In der folgenden Funktion werden zunächst die entsprechenden Schaltflächen provisorisch deaktiviert und nur dann aktiviert, wenn mindestens
eine Arbeitsmappe mit eingeblendetem Fenster geöffnet ist und in der aktiven Arbeitsmappe in den benutzerdefinierten Dokumenteigenschaften
die Add-In-Kennung enthalten ist.
|
|
|
Public Function IsTemplateWorkbook() As Boolean
On Error Resume Next
ToggleCBarButtons False
If GetVisibleWkbWindows > 0 Then
If HasDocProperty() Then
ToggleCBarButtons True
IsTemplateWorkbook = True
End If
End If
On Error GoTo 0
End Function
|
|
|
Im Initialize-Ereignis des Klassenmoduls wird obige Funktion wie folgt aufgerufen.
|
|
|
Private Sub Class_Initialize()
Set meXLAppl = Excel.Application
IsTemplateWorkbook
End Sub
|
|
|
Die Funktion zur Überprüfung der ggf. aktiven Arbeitsmappe ist bewusst als öffentlich deklariert worden. Die Funktion sollte
vorsichtshalber auch in den OnAction-Prozeduren der entsprechenden Schaltflächen aufgerufen werden, da, wie bereits geschrieben,
die Ereignisse WindowDeactivate und WindowActivate des Application-Objekts nicht unbedingt immer
"ordnungsgemäß" ausgeführt werden.
|
|
|
Public Sub OnAction_Demo()
If gCAppEvents.IsTemplateWorkbook Then
MsgBox "Tue 'was ;-)", vbExclamation, gcAPP_NAME
End If
End Sub
|
|
|
|
Anbinden des Add-Ins an Excel
|
[ Top ]
|
|
Im ersten Beispiel-Add-In, wird im Open-Ereignis, das bei jedem Öffnen des Add-Ins ausgeführt wird, die Prozedur,
in der die Symbolleiste erstellt wird, ggf. bereits vorhandene Add-In-Einstellungen aus der Registry ausgelesen werden und der
globalen Variable eine neue Instanz des Klassenobjekts mit den Ereignissen des Application-Objekts zugewiesen wird,
wie folgt aufgerufen.
|
|
|
Private Sub Workbook_Open()
AddIn_Initialize
End Sub
|
|
|
Soll ein Add-In nur für bestimmte Arbeitsmappen verwendet werden, ist es wichtig zu wissen, ob es sich bei der in Excel ggf. aktiven
Arbeitsmappe um eine Arbeitsmappe mit Add-In-Kennung handelt. Um die in Excel ggf. aktive Arbeitsmappe ermitteln zu können, muss die
OnTime-Methode zum Initialisieren der Klasse verwendet werden.
|
|
|
Private Sub Workbook_Open()
Application.OnTime Now, "'" & ThisWorkbook.Name & _
"'!AddIn_Initialize"
End Sub
|
|
|
Wenn in Excel ein Add-In zur Auflistung der Add-Ins (Dialog Add-Ins-Manager) hinzugefügt und geöffnet wird, egal ob per VBA oder manuell,
wird in der MsgBox in folgendem Open-Ereignis der Dateiname des Add-Ins (!) zurückgegeben. Ein bisschen verwunderlich ist das schon,
da ein Add-In an sich gar keine "aktive Arbeitsmappe" sein kann.
|
|
|
Private Sub Workbook_Open()
'Zum Testen
On Error Resume Next
MsgBox "Name der aktiven Arbeitsmappe im Open-Ereignis: " & _
ActiveWorkbook.Name
On Error GoTo 0
End Sub
|
|
|
Wird das Add-In jedoch "nur" geöffnet, z. B. per Doppelklick im Explorer, und das Add-In ist nicht in der Auflistung der Add-Ins aktiviert,
so wird in der MsgBox der Name der aktiven Arbeitsmappe angezeigt, sofern eine Arbeitsmappe in Excel sichtbar geöffnet ist.
|
|
|
Das Erstellen eines Excel-Add-Ins (*.xla) ist auch nicht schwieriger oder gar viel anders als die Programmierungen in einer "normalen" Arbeitsmappe.
Add-Ins haben aber den Vorteil, dass der Code und die Funktionalität an zentraler Stelle verwaltet werden kann und sie auch leichter auszutauschen sind.
|
Der Code in den beiden VBA-Projekten ist so aufgebaut, dass dieser leicht als Grundlage für eigene Projekte verwendet werden kann.
Die Beispiele im Download sind ausführlich kommentiert. Es ist allerdings nur eine minimale Fehlerbehandlung enthalten, diese müsste noch
entsprechend ergänzt werden.
|
In den beiden Add-Ins ist weder eine Installations- noch eine Deinstallationsroutine enthalten. Lediglich beim Entladen der Add-Ins im Add-In-Manager
werden die vom Add-In per VBA erstellten Registry-Einträge ggf. gelöscht.
Geplant ist ein weiteres Tutorial, in dem beschrieben wird, wie man ein Add-In per VB/VBA installieren und wieder deinstallieren kann.
|
|
Betriebssystem |
Win 95 |
|
|
Win 98 |
|
|
Win ME |
|
|
Win NT |
|
|
Win 2000 |
|
|
Win XP |
|
|
|
Excel-Version |
Excel 97 |
|
|
Excel 2000 |
|
|
Excel 2002 (XP) |
|
|
Excel 2003 |
|
|
|
|
Download (104 kB)
|
Downloads bisher: [ 5170
]
|
|
|