Wo eigene Addins ablegen?
#11
(27.02.2025, 17:08)struct schrieb: Inwiefern würd das helfen? D.h. was müsste das Skript machen?

Jürgen

Ganz "einfach", mit dem Installationsskript sorgst Du dafür, dass das AddIn immer im gleichen lokalen Verzeichnis landet, am besten in  C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns
Und diesen Pfad referenziert Du, indem Du den Benutzernamen z.B. mit Hilfe von Environ("Username")  bestimmst oder eine API Funktion wie GetUserName nimmst.

Deine Frage überrascht mich, da du hier problemlos eine C-Routine schreibst, aber in deinem VBA-Skript deinen Benutzernamen anscheinend fest hinterlegt hast und nicht weißt, wie man das dynamisch umsetzt.
Antworten Top
#12
(28.02.2025, 09:46)Warkings schrieb: Ganz "einfach", mit dem Installationsskript sorgst Du dafür, dass das AddIn immer im gleichen lokalen Verzeichnis landet, am besten in  C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns
Und diesen Pfad referenziert Du, indem Du den Benutzernamen z.B. mit Hilfe von Environ("Username")  bestimmst oder eine API Funktion wie GetUserName nimmst.

Deine Frage überrascht mich, da du hier problemlos eine C-Routine schreibst, aber in deinem VBA-Skript deinen Benutzernamen anscheinend fest hinterlegt hast und nicht weißt, wie man das dynamisch umsetzt.

Die Funktionen aus dem Addin werden aber direkt in Zellen der Tabelle genutzt. Zum einen weiß ich nicht, ob ich in einer Zelle auch Umgebungsvariablen nutzen kann und zum anderen sieht das dann nicht unbedingt elegant aus und verringert die Lesbarkeit, wenn bei jedem Makro-Aufruf ein Pfad vor dem Makro steht.

Jürgen

(27.02.2025, 19:03)volti schrieb: Nun, ich kenne ja die Handhabe nicht.

Ich nahm an, dass per Software, also z.B. aus einer von Dir erstellten Datei bei User auf die AddIn-Datei zugefriffen werden soll und dort ein fester Pfad drin steht.

Anstelle dieses festen Pfades dann einfach im Code den flexiblen Pfad nehmen.
Oder ich habe es falsch verstanden.

Environ$("Appdata") & "\Microsoft\AddIns"  an Stelle von C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns

Gruß KH

Wo würde ich das eintragen? Bisher gebe ich den Pfad überhaupt nicht an. Wenn die xlam geladen ist, kann ich alle darin definierten Makros nutzen.

Würde ich das dann jedem Makro-Aufruf voranstellen? Das verringert die Les-, Wart- und Übertragbarkeit aber deutlich.

Jürgen
Antworten Top
#13
Hi,
(27.02.2025, 14:23)struct schrieb: Wenn sie so eine Datei öffnen, hat jeder Makro Aufruf den gesamten Pfad des Ablageortes des Addin auf meinem Rechner vorangestellt, den es auf ihrem Rechner natürlich nicht gibt.
Genau das verstehe ich nicht. Wenn ich ein AddIn verwende, das Funktionen bereitstellt, dann steht doch niemals nicht irgendein Dateiname davor. Kann es sein, dass du gar kein echtes AddIn hast, sondern "nur" eine normale Excel-Datei?
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#14
(28.02.2025, 11:39)HKindler schrieb: Hi,
Genau das verstehe ich nicht. Wenn ich ein AddIn verwende, das Funktionen bereitstellt, dann steht doch niemals nicht irgendein Dateiname davor. Kann es sein, dass du gar kein echtes AddIn hast, sondern "nur" eine normale Excel-Datei?

Hab eine leere Excel datei erzeugt, den Visual Basic Editor geöffnet, ein Modul hinzugefügt and da meinen Code rein geschrieben. Und dann als Addin (*.xlam) gspeichert. ist das korrekt so?

Wie gesagt, wenn nur ich selbst das benutze klappt alles und es steht kein Pfad vor den Makros. Öffnet jemand anders die gleiche Datei, steht ein Pfad davor (der auf mein Verzeichnis zeigt, dass es auf dem anderen Rechner nicht gibt) und Excel findet das Addin nicht. Wenn man die Quelle ändert, funktioniert wieder alles.

Jürgen
Antworten Top
#15
(28.02.2025, 10:47)struct schrieb: Die Funktionen aus dem Addin werden aber direkt in Zellen der Tabelle genutzt. Zum einen weiß ich nicht, ob ich in einer Zelle auch Umgebungsvariablen nutzen kann und zum anderen sieht das dann nicht unbedingt elegant aus und verringert die Lesbarkeit, wenn bei jedem Makro-Aufruf ein Pfad vor dem Makro steht.

Jürgen


Wo würde ich das eintragen? Bisher gebe ich den Pfad überhaupt nicht an. Wenn die xlam geladen ist, kann ich alle darin definierten Makros nutzen.

Würde ich das dann jedem Makro-Aufruf voranstellen? Das verringert die Les-, Wart- und Übertragbarkeit aber deutlich.

Jürgen

Im Ausgangspost hattest Du geschrieben: "Die Kollegen haben das Addin auch im gleichen Verzeichnis installiert, der Benutzername ist aber natürlich anders und damit ist es eben auch ein anderes Verzeichnis."

Das hat mich zu der Annahme verleitet, dass aus irgendeinem Grund "C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns" Dir Probleme macht. Wenn das nicht so ist,  habe ich Dein Problem nicht verstanden.

Vielleicht hilft KI
Zitat:Damit du Subs oder Funktionen aus einem Add-In in einem Makro einer neuen Excel-Datei aufrufen kannst, gibt es mehrere Möglichkeiten. Hier sind die gängigsten Methoden:

1. Add-In als Referenz einbinden (für öffentliche Funktionen)
Wenn dein Add-In öffentliche Funktionen oder Subs enthält, kannst du es als VBA-Referenz hinzufügen und direkt aufrufen.
Schritte:
  1. Öffne die neue Excel-Datei.
  2. Gehe in den VBA-Editor (ALT + F11).
  3. Klicke auf Extras > Verweise....
  4. Scrolle in der Liste nach deinem Add-In (der Name entspricht dem Titel im Add-In-Manager).
  5. Aktiviere das Häkchen und bestätige mit OK.
  6. Nun kannst du die öffentlichen Subs oder Funktionen des Add-Ins direkt in deinem Makro aufrufen, z. B.:
    Code:
    Call MeineAddInSub
    ' oder
    MeineAddInSub
    Falls es sich um eine Funktion handelt:
    Code:
    Dim Ergebnis As String
    Ergebnis = MeineAddInFunktion(Argument)
Voraussetzung:
Die Sub oder Funktion im Add-In muss als Public deklariert sein:
Code:
Public Sub MeineAddInSub()
    MsgBox "Das ist eine Sub aus dem Add-In!"
End Sub

2. Add-In über Application.Run aufrufen (auch ohne Referenz)
Falls du das Add-In nicht als Referenz einbinden kannst oder willst, kannst du die enthaltenen Subs mit Application.Run aufrufen.
Beispiel:
Code:
Application.Run "MeinAddIn.xlam!MeineAddInSub"
Falls die Sub Parameter erwartet:
Code:
Application.Run "MeinAddIn.xlam!MeineAddInFunktion", Argument1, Argument2
Hinweis:
  • Der Name des Add-Ins muss exakt stimmen, wie es in Excel geladen ist.
  • Die Sub oder Funktion muss Public sein.

3. Benutzerdefinierte Funktionen (UDFs) in Excel-Zellen nutzen
Falls das Add-In eine benutzerdefinierte Funktion enthält, kannst du diese direkt in einer Excel-Zelle nutzen, z. B.:
Code:
=MeineAddInFunktion(A1)
Voraussetzung:
Die Funktion muss
Code:
Public Function
sein, z. B.:
Code:
Public Function MeineAddInFunktion(x As Double) As Double
    MeineAddInFunktion = x * 2
End Function

Zusätzlicher Tipp: Add-In sicherstellen
Falls das Add-In beim Öffnen nicht geladen ist, kannst du es zur Laufzeit aktivieren:
Code:
If AddIns("MeinAddIn").Installed = False Then
    AddIns("MeinAddIn").Installed = True
End If

Wann welche Methode?
Methode
Vorteile
Nachteile
VBA-Referenz setzen
Einfacher direkter Zugriff
Muss manuell gesetzt werden
Application.Run
Funktioniert auch ohne Referenz
Langsamer als direkter Aufruf
Excel-Zellfunktion
Ideal für Benutzer, keine VBA-Kenntnisse nötig
Nur für Funktionen, nicht für Subs
Antworten Top
#16
Code:
Sub M_snb()
  MsgBox Application.UserLibraryPath
  MsgBox Application.LibraryPath
End sub

Ich würde ein 'general' Addin in 'Library' speichern.

PS. ein AddIn muss auch ein Isaddin Property =true haben


Angehängte Dateien Thumbnail(s)
   
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#17
(28.02.2025, 13:51)Warkings schrieb: Im Ausgangspost hattest Du geschrieben: "Die Kollegen haben das Addin auch im gleichen Verzeichnis installiert, der Benutzername ist aber natürlich anders und damit ist es eben auch ein anderes Verzeichnis."

Das hat mich zu der Annahme verleitet, dass aus irgendeinem Grund "C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns" Dir Probleme macht. Wenn das nicht so ist,  habe ich Dein Problem nicht verstanden.

Vielleicht hilft KI

Hallo Warkings,

ja, ich nehme an, das ist das Problem. Excel scheint sich zu merken, wo die Datei liegt, in der die Makros definiert sind. Und wenn die Datei bei Bearbeitung auf einem anderen Rechner nicht da liegt (z.B. weil es das Verzeichnis dort nicht gibt, das es ja den Nutzernamen enthält und der Nutzer ein anderer ist.

Danke auch für die Auflistung der Wege, wie ich ein Addin für Excel bekannt machen kann. Allerdings funktionieren die ersten zwei Methoden nur, wenn ich die Makros in VBA verwenden will. Aber nicht, wenn ich sie in Zellen nutzen möchte, wie in meiner Anwendung. Die dritte Variante passt zwar auf meinen Anwendungsfall, funktioniert in der Form aber nicht, denn woher soll Excel wissen, wo das Addin liegt?

Was mir helfen würde wäre das Äquivalent zu PATH, wo ich dann beliebige Addins ablegen kann. Ähnlich wie es das Betriebssystem macht. Ich würde diesen Pfad einmal angeben und sobald in Excel ein makro aufgerufen wird, das es nicht kennt, sucht Excel unter diesem Pfad, ob der Befehl in einem dort abgelegten Addin definiert wird. Jeder Nutzer könnte seinen eignen PATH definieren und es würde damit auf jedem Rechner funktionieren.

Gruß, 
Jürgen

> Ich würde ein 'general' Addin in 'Library' speichern.

Tut mir leid, das versehe ich nicht. Meinst du, ich soll die Addin Datei (also z.b. test.xlam) im Ordner "Library" speichern? Wo finde ich diesen Ordner?


> PS. ein AddIn muss auch ein Isaddin Property =true haben

Habs gerade überprüft, ist auf true.


Gruß,

Jürgen
Antworten Top
#18
Zitat:Wo finde ich diesen Ordner?

Code übersehen, nicht getestet ?

Jeder User kan diesen Code verwenden:

Code:
Sub M_snb()
   With Application.FileDialog(3)
      .InitialFileName = Application.LibraryPath & "\*.xlam"
      If .Show Then AddIns.Add(.SelectedItems(1), True).Installed = True
   End With
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#19
(03.03.2025, 10:10)struct schrieb: ...
Wenn sie so eine Datei öffnen, hat jeder Makro Aufruf den gesamten Pfad des Ablageortes des Addin auf meinem Rechner vorangestellt, den es auf ihrem Rechner natürlich nicht gibt. Wenn sie "Quelle ändern" nutzen, können sie das natürlich korrigieren und alles funktioniert wieder. Das ist aber etwas umständlich.
...

Ich denke, um Dein Problem zu verstehen, musst Du das oben Geschriebene im Detail erläutern, ggf. mit Code oder Formeln, oder was immer da das Problem ist. 

BTW
Application.LibraryPath
Application.UserLibraryPath
liefert Dir die jeweiligen Pfade zur Laufzeit. 
Excel Options - Folder Paths
Antworten Top
#20
(03.03.2025, 11:15)snb schrieb: Code übersehen, nicht getestet ?

Jeder User kan diesen Code verwenden:

Code:
Sub M_snb()
   With Application.FileDialog(3)
      .InitialFileName = Application.LibraryPath & "\*.xlam"
      If .Show Then AddIns.Add(.SelectedItems(1), True).Installed = True
   End With
End Sub

Ok, mir war nicht klar, dass mir dieser Code das Verzeichnis ausgibt.

Das sind dann aber die bekannten Verzeichnisse, mit den Problemen, die ich schon genannt habe:

- UserLibraryPath ist bei jedem Benutzer anders. Excel scheint aber immer an der Stelle zu suchen, bei dem das Addin beim Erstellen der Excel Datei lag. Und diesen Pfad gibts dann bei anderem Nutzer/Rechner nicht.
- LibraryPath ist ohne admin Rechte nicht schreibbar.

Jürgen

(03.03.2025, 11:20)Warkings schrieb: Ich denke, um Dein Problem zu verstehen, musst Du das oben Geschriebene im Detail erläutern, ggf. mit Code oder Formeln, oder was immer da das Problem ist. 

BTW
Application.LibraryPath
Application.UserLibraryPath
liefert Dir die jeweiligen Pfade zur Laufzeit. 
Excel Options - Folder Paths

Hatte gedacht, das könnte man verstehen. Ok, dann anders.

1. Ich erstelle ein addin und lege es auf meinem Rechner unter c:\users\ich\AppData\Roaming\Microsoft\Addins\meinAddin.xlam ab.
2. Ich aktiviere das Addin unter Optionen->Add-Ins->"verwalten: Excel Add-Ins Los"
2. Ich erstelle eine Excel Datei Berechnungen.xlsxm und nutze das Makro meineFunktion(A1), die sich Addin befinden.
3. ich speichere die Datei ab.
4. Mein Kollege legt das Addin bei sich unter  c:\users\Kollege\AppData\Roaming\Microsoft\Addins\meinAddin.xlam auf seinem Rechner ab.
5. Mein Kollege öffnet meine Excel Datei Berechnungen.xlsm auf seinem Rechner.
6. Jetzt steht bei jedem Aufruf der Funktion  ='c:\users\ich\AppData\Roaming\Microsoft\Addins\meinAddin.xlam'!meineFunktion(A1) - Und der Aufruf funktioniert nicht, weil er das Verzeichnis nicht hat.

Jürgen
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste