Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1308to1312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Addinfunktionalität MAC

Addinfunktionalität MAC
25.04.2013 16:08:40
JACKD
Hallo Gemeinde
Ich hab mit starker Unterstützung von Nepumuk und Luc
ein kleines Addin geschrieben.
Nun wie soll ich sagen, es funktioniert auch auf meinem PC.
Aber,
Ich hab es nun mal an einen Mac geschickt und da passiert folgendes. Das Addin erweitert die Menüzeile bei jeder Öffnung um die gleiche Position (also repliziert die Schaltfläche)
Hier der Code

''' In der Arbeitsmappe'''
Option Explicit
Private mobjApplicationClass As clsApplication
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set mobjApplicationClass = Nothing
End Sub
Private Sub Workbook_Open()
Set mobjApplicationClass = New clsApplication
End Sub


'''Im Modul'''
Option Explicit
Dim i, j As Double
Public Sub X()
Dim myCommandBar As CommandBar
Dim myCommandBarButton As CommandBarButton
Dim myCommandBarPopup As CommandBarPopup
Set myCommandBar = Application.CommandBars("Worksheet Menu Bar")
Set myCommandBarPopup = myCommandBar.Controls.Add(Type:=msoControlPopup, _
Before:=myCommandBar.Controls.Count + 1, Temporary:=True)
With myCommandBarPopup
.BeginGroup = True
.Caption = "mein_Makro"
.TooltipText = "für das aktuelle Blatt"
End With
Set myCommandBarButton = myCommandBarPopup.Controls.Add(Type:=msoControlButton, _
Before:=myCommandBarPopup.Controls.Count + 1, Temporary:=True)
With myCommandBarButton
.BeginGroup = True
.Caption = "für das aktuelle Blatt"
.FaceId = 283
.OnAction = "mein_Makro"
.Style = msoButtonIconAndCaption
.TooltipText = "für das aktuelle Blatt"
.Tag = "für das aktuelle Blatt"
End With
Set myCommandBar = Nothing
Set myCommandBarButton = Nothing
Set myCommandBarPopup = Nothing
End Sub
Sub mein_Makro()
'Diverses Zeug'
End Sub


'''In der Klasse'''
Option Explicit
Public WithEvents mobjApplication As Application
Public Sub Class_Initialize()
Set mobjApplication = Application
End Sub
Public Sub Class_Terminate()
Set mobjApplication = Nothing
End Sub
Public Sub mobjApplication_WorkbookOpen(ByVal Wb As Workbook)
If Not Wb Is ThisWorkbook Then Call X
End Sub
Public Sub mobjApplication_NewWorkbook(ByVal Wb As Workbook)
Call X
End Sub
Wieso passiert es also, dass es auf nem Doser geht, und auf nem Osx`ler dazu führt das sich das Menü stetig erweitert?
Grüße
(In der Hoffnung das man das so leicht beantworten kann)

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
wirklick nur aufm MAC ?
25.04.2013 16:30:23
EtoPHG
Hallo Jack,
Ich kann daraus nur erkennen, dass bei jedem Öffnen einer bestehenden oder neuen Arbeitsmappe dein X-Makro abläuft, dass einen Eintrag in die "Worksheet Menu Bar" addiert. Ich sehe nirgends Code, der kontrolliert, ob das schon 1x passiert ist oder Code, der den Eintrag wieder löscht.
Darum behaupte ich mal, dass dies nichts mit MAC oder WIN zu tun hat.
Gruess Hansueli

Your right
25.04.2013 16:37:52
JACKD
Hast recht Hansuli.
Ist mir nur nicht aufgefallen, da das Menü beim Mac anders aufgebaut ist.
Hab es eben bei dem Doser nochmal probiert und es tritt tatsächlich auf.
Hast du einen Ansatz, wie ich das beheben kann?
Vielen Dank
und Grüße

Anzeige
Keine klasseprgm, sondern ganz ...
25.04.2013 17:06:35
EtoPHG
konvenrionell, Jack
Dein X-Code in da Workbook_Open.
Im _Close Code zum Löschen nicht vergessen.
Als AddIn abspeichern, schliessen und dann installieren. Fertig.
Gruess Hansueli

AW: Keine klasseprgm, sondern ganz ...
25.04.2013 17:41:46
Jack
Danke hansueli
Ich werd deinen Ansatz morgen weiter verfolgen.
Was mich grad irritiert ist allerdings die Tatsache das ich nun doch keine klasse brauche.
(Siehe auch Post mumpel)
Grüße

AW: Keine klasseprgm,, konventionell
25.04.2013 18:12:48
EtoPHG
Hallo Jack,
Was heisst den dein Begriff Zitat:auto-laufen? oder Zitat:Der befehl workbook_open hat mich auf jeden fall nicht nach vorn gebracht? Was war denn 'damals' falsch, oder ist nicht gelaufen?
Wenn ein AddIn über den XL AddIn-Manager installiert wird, dann wird es mit jeder XL-Instanz geladen. Dabei durchläuft es genau einmal seinen eigenen Workbook_Open und beim Schliessen von Excel das _BeforeClose Ereignis. Code in Modulen des AddIn's steht während der Dauer der XL-Session für alle in dieser Instanz geöffneten Arbeitsmappen zur Verfügung. Klassenprogrammierung brauchst du dann, wenn du (wie in deinem Beispiel) Ereignis-Code ausführen willst, der unabhängig (bzw. zusätzlich, vorgeschaltet) von den individuellen Arbeitsmappen-Ereigniscodes ablaufen soll. Das sind 2 völlig verschieden Paar Stiefel.
Gruess Hansueli

Anzeige
AW: Keine klasseprgm,, konventionell
25.04.2013 18:42:33
JAck
Danke für die ausführliche Info Hansueli
Also, was meinte ich mit
Auto-Laufen das addin sollte automatisch Starten beim Öffnen einer Mappe
Workbook_Open hat das in dem Fall aber nicht gemacht.
Und nun mea culpa,
Ich glaube das dass Problem im Detail liegt bzw. an meiner Unwissenheit.
Im heutigen Tagesverlauf habe ich nachdem mir Nepumuk eine Musterklasse erstellt hat, festgestellt, dass ich zum einen das addin installieren muss, und zum 2. (das hab ich bisher versäumt) die funktionaliät erst dann hergestellt wird, wenn ich eine bereits gespeicherte Mappe öffne.
Wobei mir dabei eins nicht so ganz klar ist.
Wenn ich eine neue Mappe öffne, steht mir das Addin PowerPivot zur Verfügung.
Wenn ich eine neue Mappe öffne, (in nach meiner jetzigen Logik) mit meinem Addin wird es erst Verfügbar, sobald ich die gespeicherte Mappe erneut öffne.
Ich merk auch, wenn ich den TExt hier schreibe, das ich eine Denkhürde drin hab. Leider kann ich aktuell das addin nicht umschreiben, da mein Mac bei Passworteingabe (trotz richtigem Passwort) meint, es wäre das falsche o.0
Vielen Dank nochmals für eure Tatkräftige Unterstützung

Anzeige
AW: Keine klasseprgm,, konventionell
25.04.2013 19:02:24
mumpel
Mühsam ernährt sich das Eichhörnchen. Also was genau möchtest Du denn erreichen? Soll das Add-In nur bei bestimmten Dateien laufen?

Nüffe? Welfe Nüffe? ;-D
25.04.2013 19:41:43
Jack
Hihi
Also was will ich erreichen.
Eigentlich mach ich es nur zum
Spaß. Um mich in die Materie einzudenken.
In Ferner Zukunft möchte ich Funktionlitäten wie blattexport und udf's meinen Kollegen zur Verfügung stellen.
Aber das möchte ich gern erst dann machen, wenn das addin einigermaßen sicher läuft.
Warum addin?
Weil ich glaube das dass entspannter zum verteilen ist...?
Oder? Grüße

AW: Nüffe? Welfe Nüffe? ;-D
26.04.2013 05:38:25
mumpel

Zitat:
[...] Weil ich glaube das dass entspannter zum verteilen ist...? [...]
____________________________
Quelle: Herber-Forum


Wenn die Kollegen noch weniger Ahnung haben wie Du wird es schwer werden. ;-)
In Netzwerken sollte ein Add-In besser vom Administrator verteilt werden. Das Add-In zentral speichern. Der Administrator kann das Add-In dann per Gruppenrichtlinie einbinden. Dabei wird der "Verweis" direkt in die Registrierungsdatenbank geschrieben, anstatt das Add-In über den Add-In-Manager einbinden zu müssen.

Anzeige
AW: Nüffe? Welfe Nüffe? ;-D
26.04.2013 05:41:50
mumpel
Bei Mac-OS ist das natürlich nicht so einfach, da es dort keine Registrierungsdatenbank gibt.

AW: Nüffe? Welfe Nüffe? ;-D
26.04.2013 08:54:19
JACKD
Hallo Mumpel..
Wenn man diesen Weg gehen sollte / wollte dann würde es tatsächlich schwer. Denn tatsächlich hab ich immernoch die meiste Ahnung =)
Allerdings um die Rahmenbedingungen zu erklären, sind wir ein kleines Unternehmen mit 3 Laptops und einer Workstation sowie einer alten Workstation die als "Server" fungiert.
Daher, und aufgrund der Tatsache das mein IT-Wissen recht begrenzt ist, würde ich es vermeiden in der Registry zu "pfuschen" denn soweit ich weiß kann man da schnell, viel kaputt machen. Und deswegen auch der Weg "über" das verteilen eines Addins
Grüße

Anzeige
Nur keine Angst....
26.04.2013 11:21:37
mumpel
... da kannst Du nicht viel kaputt machen.
Pfad: HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
In diesem Pfad gibt es Einträge (vom Typ Zeichenfolge) mit dem Namen "OPEN", gefolgt von einer Zahl (OPEN, OPEN1, OPEN2 etc.), die den Pfad zum Add-In beinhalteen.

AW: Nur keine Angst....
26.04.2013 15:52:16
JAck
Hallo Mumpel
Vielen Dank für den Rat... hört sich wirklich einfach an, sollte ich tatsächlich mal ausprobieren.
Auf jeden Fall werd ich das Addin noch anpassen, aber heut war einfach nix möglich..
Grüße und vielen Dank

Abschliessend
29.04.2013 11:23:17
JACKD
, nocheinmal vielen Dank für die zahlreiche Hilfe.
Letztlich funktioniert es ohne Klassen, Ich hab auch keine Ahnung was ich falsch gemacht habe.
An Mumpel hätte ich aber noch ne Frage,
wenn ich das Über eine Gruppenrichtlinie einbinde ( und es zentral auf dem Server liegen hab) wie verhält es sich, wenn der PC dann vom NEtzwerk getrennt ist? (Ist das Addin denn dann noch "nutzbar"?)
Grüße

Anzeige
AddIn Lokation
29.04.2013 15:24:55
EtoPHG
Hallo Jack,
Wenn ein User ein AddIn von einer Netz-Lokation installiert, wird er gefragt, ob eine Kopie in seiner Client-Installation von Office abgelegt werden soll. Beantworet er diese Frage mit Nein, geht auch die AddIn-Funktionalität bei nicht verfügbarem Netz verloren. Andernfalls hat er eine Kopie auf seinem Rechner. Das hat dann den Nachteil, dass bei Änderung des AddIn-Codes auch eine neue Installation (Deaktivierung/Neuaktivierung via AddIn-Manager) für jeden Client erfolgen muss.
Gruess Hansueli

AW: Your right
25.04.2013 17:07:42
mumpel
Hallo!
Weshalb hast Du nicht von Anfang an gesagt dass Du nur eine Symbolleiste möchtest? Dafür benötigst Du keine Klasse. Da genügt "Workbook_Open" (da wird die Symbolleiste erstellt) und "Workbook_BeforeClose" (da wird die Symbolleiste gelöscht). Alternativ kannst Du "Workbook_AddinInstall" und "Workbook_AddinUninstall" nehmen. Siehe VBA-Hilfe.
Gruß, René

Anzeige
AW: Your right
25.04.2013 17:40:19
Jack
Hallo mumpel
Vielen dank für deine Antwort.
Warum in Klassen....
Weil ich gestern gefragt hab, wie ich ein addin zum auto-laufen bekomme, und du mir da gesagt hast, mit Klassen.
(Workbook_open pendant)
Bilde ich mir zumindest ein. ?

AW: Your right
25.04.2013 18:41:22
mumpel
Du hast Dich missverständlich ausgedrückt. Aber wie bereits erwähnt, ist "Workbook_Open" auch bei Add-Ins lauffähig. Besser ist in diesem Fall aber "Workbook_AddinInstall".

I'm sorry
25.04.2013 18:44:32
JAck
Mangels wissen fehlt mir natürlich auch die Fachtermini.
Ich bin aber gewillt, dazu zu lernen. Und dabei unterstützt ihr mich ja tatkräftig.
Und danke für eure Geduld
=)
Grüße

Anzeige
Nachtrag
25.04.2013 18:44:48
mumpel
Ein Add-In ist übrigens nichts weiter als eine versteckte Arbeitsmappe. Nur kann man da nichts einblenden wie bei einer ausgeblendeten Arbeitsmappe. Ansonsten funktioniert alles wie bei sichtbaren Arbeitsmappen. Du könntest also auch in die Tabellen des Add-Ins (per Code) etwas schreiben.

Na, nicht übertreiben, ...
26.04.2013 04:13:43
Luc:-?
…Jack;
hatte nur angemerkt, dass die von dir anvisierte Klasse standardmäßig bereits vorbereitet, aber noch nicht eingerichtet ist. Die benötigt man nur für bestimmte Zwecke, die bspw für mehrere Workbooks gelten sollen. Für ein AddIn braucht man sie idR nicht. Die für den Start eines AddIns mit Xl von MS vorgesehenen Einstellungen reichen idR völlig aus. Weiteres kannst du ja später mal ausprobieren. Das gewöhnliche Vorgehen sollte für Übungszwecke erst mal ausreichen.
Mit Klassen kannst du ja außerdem noch experimentieren. Die Application-Klasse wäe da ein 1.Einstieg.
Gruß Luc :-?

Anzeige
Das sollte ich
26.04.2013 08:57:38
JACKD
tatsächlich mal probieren.
Ich hab mal vor nem Jahr angefangen mich in Klassen einzudenken, hab es dann aber aus Zeitgründen wieder aufgegeben.
Die Zeit sollte ich jetzt vielleicht wieder investieren. =)
Grüße und Danke

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige