Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen

AddIns per VBA automatisch einbinden. | Herbers Excel-Forum


Betrifft: AddIns per VBA automatisch einbinden. von: Sebastian
Geschrieben am: 06.08.2012 15:13:04

Und wieder der Sebastian...

Ich habe weig bis keine Erfahrung mit AddIns, schreibe aber ofrt recht große CODE-Module und möchte damit mal die *xlsm Dateien verschlanken, so dass immer Alle Makros irgendwo getrennt gespeichert sichd (z.B. in einem Vertrauenswürdigen Ordner). Be meinen Makros habe ich mir folgende technik angewöhnt:

In den Tabellenblättern sind die Schaltflächen (ActiveX-Schaltflächen) und in den Modulen die Makros. die Rufe ich von den Tabellenblättern aus auf. Jetzt möchte ich die Module von der Arbeitsmappe mit den Tabellen trennen und die Makros in dem AddIn laufen lassen. Die Module haben alle spezielle Namen.

Folgendes Soll nun dabei passieren:

+ Ich öffne die Arbeismappe
+ Über ein Makro binde ich die AddIns automatisch an
+ Die Verweise in den Schaltflächen werden automatisch per VBA auf die Makros das AddIn verwiesen (also faktisch wird Code in den Tabellenblatt-Modulen umgeschrieben). Die Identifikation der im AddIn vorhandenen Prozeduren erfolgt über Modulname.Makroname.

Also was bisher so aussah: Call MODUL_IMPORT.Importdaten Formatieren
soll jetzt automatisch so aussehen: Call AddInName.xla!MODUL_IMPORT.Importdaten Formatieren

+ Nach dem ganzen ist die Mappe "betriebsbereit" und kann mit ggf. modifizierten AddIn Makros laufen.

Den AddIn Namen würde ich im CODE als Konstante hinterlegen. Der Pfad des Addins sollte Variieren können... aber das bekomme ich hin. Wenn einer einen guten Tipp hat, wie man das Addin per VBA automatisch finden und vertrauenswürdig machen kan fände ich das auch ganz toll. Wie da der CODE aussehen müsste ist mir komplett ein Rätsel.

Ich möchte so meine Anwendungen "pflegbar" bzw. "Update-fähig" machen.

Geht so etwas überhaupt? Kann ich während der Laufzeit CODE umschreiben...auch in Bezug auf die AddIns un deren Prozedurverknüpfungen?

Wie muss ich das überhaupt machen..bei AddIns habe ich wirgendwie keinen Plan...

Freue mich, über jede Hilfe.

Danke schon mal.

Freundliche Grüße

Sebastian

  

Betrifft: AW: AddIns per VBA automatisch einbinden. von: fcs
Geschrieben am: 12.08.2012 14:07:28

Hallo Sebastian,

ich hab jetzt mal ein wenig experimeniert, was funktionieren könnte.
Grundvoraussetzung ist natürlich, dass du in der Programmierung den Bezug zu den Objekten korrekt definiert hast. Das dürfte der Fall sein, wenn der Code der von den Active-X-Schaltflächen gestartet wird immer in allgemeinen Modulen gespeichert ist. Es darf dann aber z.B. nicht mit "Thisworkbook" gearbeitet werden, um auf die Mappe mit den Schaltflächen zu verweisen, sondern es muss mit Activeworkbook gearbeitet werden bzw. die Zuweisung zu einer Objektvariable an geeigneter stelle im Code erfolgen.

Die Vorgehensweise zum Arbeiten mit AddInns ist dann etwa wie folgt:
1. Du erstellst eine separate xlsm-Datei für den Code der auszulagernden Makros.
In diese Datei kopierst du die Module mit dem Code für die Schaltflächen. Das Verzeichnis in dem du diese Datei speicherst ist beliebig wählbar. Diese Datei wird dann die Basis für die Erstellung der xlam-Datei (AddIn).
2. Nach dem Speichern der xlsm-Datei mit dem Code speicherst du die Datei als Excel-AddIn-Datei(xlam)
Speichere die Datei in dem von Excel standardmößig vorgeschlagenen Verzeichnis
z.B.: "C:\Users\Username\AppData\Roaming\Microsoft\AddIns"
Dieses Verzeichnis ist kein muss, aber es erleichtert die Verwaltung der AddInns.
3. Schliesse die xlsm-Datei mit den Makros
4. Aktiviere/Registriere über Excel-Optionen-AddInns
die erstellte AddIn-Datei. So kann das AddIn später problemlos nach Bedarf aktiviert/deaktiviert werden.

5. In der Ursprungs-Datei
5.a löscht du die Module-mit dem Code für die Schaltflächen
5.b fügst du unter "DieseArbeitsmappe" den Code ein, der beim Öffnen das AddIn installiert und beim Schliessen das AddIn deinstalliert.

Option Explicit
Private Const strAddIn As String = "FileDatenMakros" 'Name des Addins, wie im AddIn-Dialog  _
angezeigt

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If MsgBox("AddIn """ & strAddIn & """ deinstallieren?", _
    vbQuestion + vbYesNo, "AddIn deinstallieren - " & strAddIn) = vbYes Then
      Application.AddIns(strAddIn).Installed = False
  End If
End Sub

Private Sub Workbook_Open()
  If Application.AddIns(strAddIn).Installed = False Then
    Application.AddIns(strAddIn).Installed = True
  End If
End Sub
Auf die If-Prüfungen kann verzichtet werden, wenn immer nur eine Datei geöffnet ist, die das AddIn benötigt.

5.c Der Code der Command-Buttons wird wie folgt angepasst.
Private Sub CommandButton1_Click()
  Application.Run "FileDatenMakros.xlam!Modul_Import.ImportDaten"
End Sub

Private Sub CommandButton2_Click()
  Application.Run "FileDatenMakros.xlam!Modul_Format.ImportDatenFormatieren"
End Sub
Wenn du deine Dateien und AddInns so konfigurierst, dann ist es nicht erforderlich, dass in den Dateien mit Schaltflächen und Daten der Code zur Laufzeit geändert werden muss. Dies würde erforderern, dass in den Sicherheitseinstellungen für Makros unter den Optionen der Zugriff auf das VBA-Projekt erlaubt werden muss.

Wenn du deine Dateien bearbeitungsfähig anderen Personen zur Verfügung stellen willst, dann muss du natürlich immer die xlam-Datei mit verschicken. Dabei reicht es dann wenn die Datendatei und die xlam-Datei im gleichen Verzeichnis gespeichert werden, um die Makros per Schaltfläche zu starten. Excel lädt dann automatisch die xlam-Datei, wenn eine Schaltfläche geklickt wird.

Gruß
Franz


  

Betrifft: AW: AddIns per VBA automatisch einbinden. von: Sebastian
Geschrieben am: 12.08.2012 14:56:55

Hallo Franz,

Vielen Dak für den Tipp,...werde das morgen mal komplett ausprobieren.
Normalerweise Programmiere ich immer mit Allgemeinen Modulen, weil ich das bis vor Kurzem gar nicht anders kannte. Den Code für "Thisworkbook" müsste ich dann in "ActiveWorkbook" umbauen und schon müsste es funzen...

Heute ist Sonntag, und da mache ich nichts... also bis morgen.

Freundliche Grüße

Sebastian




Beiträge aus den Excel-Beispielen zum Thema "AddIns per VBA automatisch einbinden."