Hallo,
momentan bräuchte ich ein wenig Hilfe bei folgendem Vorhaben:
Ich möchte ein Makro schreiben, welches die neueste Version meiner menu.xls vom Server lädt und sofort in den lokalen Startordner der jeweiligen Arbeitsstation speichert. Leider kenne ich die Variable nicht, die den Startordner bestimmt. Er ist auch nicht immer gleich.
Er kann z. B. lauten: „C:\Programme\Microsoft Office\Office12\XLSTART“
oder „D:\Program Files (x86)\Microsoft Office\Office12\XLSTART“.
Vielen Dank schon ´mal für Euer Interesse und freundliche Grüße
Thomas
Hi,
Application.StartupPath
HTH.
Markus
Grüezi falken
Wenn Du einmalig den Starpfad gefunden hast, dann lege einfach eine Verknüpfung zur Datei auf dem Server dort ab, dann wird auch ohne anderes Zutun bei jedem Start die Datei auf dem Server geladen.
Legst Du dort eine neue Version mit dem gleichen Namen ab, ist diese beim nächsten Start aktiv.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Klappt noch nicht ganz, aber danke
Hallo, Ihr 2,
toll, dass Ihr so schnell und kundig geantwortet habt.
Mein Code läuft aber leider nicht. Ich hab´s ´mal so probiert:
Sub StartPfad_finden()
Ziel = Application.StartupPath
Open „Y:\Vorlagen\Excel\xlstart\TS_menu.xls“ For Random As FreeFile
Workbook.SaveAs Filename:=Ziel & „TS_menu.xls“ 'hier hakt es
End Sub
Da kommt aber nur eine Fehlermeldung " 424 - Objekt erforderlich"
-(
Aber bis zur 3. Zeile hat es noch gepasst.
Vielen Dank dafür.
Ich würde gerne das mit der Verknüpfung ausprobieren. Geht das auch automatisch aus Excel?
Herzliche Grüße
Thomas
Hallo Markus,
hat soweit super gepasst.
Klasse.
Herzlichen Dank
Thomas
So, habe es dann doch hingekriegt 
Sub StartPfad_finden()
ziel = Application.StartupPath
Workbooks.Open Filename:=„Y:\VORLAGEN\Excel\xlstart\TS_Menu.xls“
ActiveWorkbook.SaveAs Filename:=ziel & „\Kopie von TS_Menu.xls“, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub
Manchmal hilft eben der Makrorekorder … aber „Application.StartupPath“ konnte ich nicht aufzeichnen.
Da hilft das Forum verlässlich. SUPER
Da kommt aber nur eine Fehlermeldung " 424 - Objekt
erforderlich"
Hallo Thomas,
Open gibt es mehrfach in der Hilfe!
Benutze Option Explicit.
Option Explicit
Sub StartPfad\_finden()
Dim Ziel
Ziel = Application.StartupPath & "\"
Workbooks.Open "Y:\Vorlagen\Excel\xlstart\TS\_menu.xls"
ActiveWorkbook.SaveAs Filename:=Ziel & "TS\_menu.xls" 'hier hakt es
End Sub
Gruß
Reinhard
Grüezi falken
Hallo Thomas, danke für die Hinweise. So etwas in der Art habe ich tatsächlich vor.
Die Menü-Datei soll sich immer selber erneuern und ich habe jederzeit Änderungszugriff auf die Vorlage, auch während andere User ihre jeweilige Kopie geöffnet halten, um auf dem Server gespeicherte Vorlagen und Makros aufzurufen.
Damit könnte ich endlich erreichen, dass Alle mit den gleichen Vorlagen arbeiten 
Wenn Du einmalig den Startpfad gefunden hast, dann lege
einfach eine Verknüpfung zur Datei auf dem Server dort ab,
dann wird auch ohne anderes Zutun bei jedem Start die Datei
auf dem Server geladen.
Habe ich soweit realisiert. Aber zuerst einmal durch eine kleine separate xls. Morgen werde ich sie in die MenuDatei einbinden und selbststartend in „Diese Arbeitsmappe“ das entsprechende Makro hineinkopieren.
Ich kann nicht ausschließen, dass ich dann wieder neue Fragen habe 
Legst Du dort eine neue Version mit dem gleichen Namen ab,
ist diese beim nächsten Start aktiv.
Anm.: Es geht auch unter anderem Namen, weil alle Dateien des Startordners geöffnet werden.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Herzlichen Dank und Grüße
Thomas
Grüezi Thomas
Die Menü-Datei soll sich immer selber erneuern und ich habe
jederzeit Änderungszugriff auf die Vorlage, auch während
andere User ihre jeweilige Kopie geöffnet halten, um auf dem
Server gespeicherte Vorlagen und Makros aufzurufen.Damit könnte ich endlich erreichen, dass Alle mit den
gleichen Vorlagen arbeiten
Ja, das klappt so IMO zuverlässig.
Wenn Du einmalig den Startpfad gefunden hast, dann lege
einfach eine Verknüpfung zur Datei auf dem Server dort ab,
dann wird auch ohne anderes Zutun bei jedem Start die Datei
auf dem Server geladen.Habe ich soweit realisiert. Aber zuerst einmal durch eine
kleine separate xls. Morgen werde ich sie in die MenuDatei
einbinden und selbststartend in „Diese Arbeitsmappe“ das
entsprechende Makro hineinkopieren.
OK, ich bin gespannt auf dein Feedback.
Ich kann nicht ausschließen, dass ich dann wieder neue Fragen
habe
Nur zu, hier werden Sie geholfen 
Legst Du dort eine neue Version mit dem gleichen Namen ab,
ist diese beim nächsten Start aktiv.Anm.: Es geht auch unter anderem Namen, weil alle Dateien des
Startordners geöffnet werden.
Das ist nicht was ich gemeint habe:
Wenn Du am zentralen Ort die Datei veränderst (oder eben eine veränderte mit gleichem Namen dort ablegst) wird sie durch die Verknüpfung automatisch beim Start von Excel geladen.
Dass die Namen im Startordner unterschiedlich sein können ist klar.
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
option explicit
Hallo Reinhard,
mit Deinen Änderungen läuft der Code ( hatte ich zeitgleich auch selber hingekriegt, s. o. ).
Vielen Dank für Deine Mühe.
Ich habe Deinen Code auch ohne „option explicit“ laufen lassen … keine Veränderung (?). Dabei hatte ich immer gedacht, mit eingeschalteter oe würde verhindert, dass Variablen automatisch und falsch deklariert werden. Kann oe noch etwas Anderes bewirken?
Hat es zum Auffinden der Fehler beigetragen? ( Dass ein ordentlicher Programmierer IMMER oe eingeschaltet hat, weiß ich
)
Einen schönen Tag wünscht Dir
Thomas
Die Katze beißt sich in den Schwanz
Grüezi Thomas
Hallo Thomas,
wie bereits angekündigt, brauche ich weitere Hilfe :-S
Wenn die Datei sich selber erneuern soll, gibt es immer irgendwo ein Problem, weil eine bereits geöffnete Datei überschrieben werden soll.
Die Menü-Datei soll sich immer selber erneuern und ich habe
jederzeit Änderungszugriff auf die Vorlage, auch während
andere User ihre jeweilige Kopie geöffnet halten, um auf dem
Server gespeicherte Vorlagen und Makros aufzurufen.Damit könnte ich endlich erreichen, dass Alle mit den
gleichen Vorlagen arbeitenJa, das klappt so IMO zuverlässig.
Das wäre schön, aber momentan geht es noch nicht 
Wenn Du einmalig den Startpfad gefunden hast, dann lege
einfach eine Verknüpfung zur Datei auf dem Server dort ab,
dann wird auch ohne anderes Zutun bei jedem Start die Datei
auf dem Server geladen.
Sprichst Du von einer Windows-Verknüpfung? Die per VBA erzeugt wird?
( Habe ich schon einmal versucht, aber nicht hinbekommen … )
…
Nur zu, hier werden Sie geholfen
… 
Das ist nicht was ich gemeint habe:
Wenn Du am zentralen Ort die Datei veränderst (oder eben eine
veränderte mit gleichem Namen dort ablegst) wird sie durch die
Verknüpfung automatisch beim Start von Excel geladen.
Das funktioniert ja jetzt auch schon teilweise:
Zuerst wird das lokale Menu aus dem lokalen Startordner geladen.
Somit könnte ich sogar „offline“ an jedem Arbeitsplatz mit der alten Version der integrierten Makros arbeiten. ( Die Verknüpfung mit den Vorlagen auf dem Server macht natürlich offline keinen Sinn. )
Wenn dann die neue Menudatei vom Server geöffnet wird, habe ich zwei offene Dateien: Kopie_von_Menu.xls und Menu.xls
Ich müsste also die Kopie… schließen oder unter anderem Namen und Pfad speichern, damit ich die Menu.xls über die lokale Kopie schreiben kann. Die User sollen möglichst die zentrale Vorlage nicht über längere Zeit geöffnet halten, weil ich diese sonst während dieser Zeit nicht ändern kann.
…
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Vielen Dank und freundliche Grüße
Thomas ( falken )
Grüezi Thomas
wie bereits angekündigt, brauche ich weitere Hilfe :-S
Tja, ich hatte das ja angeboten… 
Wenn die Datei sich selber erneuern soll, gibt es immer
irgendwo ein Problem, weil eine bereits geöffnete Datei
überschrieben werden soll.
Logisch - darum solltest du ja auch nicht die Dateien selbst in den Startordner legen…
Wenn Du einmalig den Startpfad gefunden hast, dann lege
einfach eine Verknüpfung zur Datei auf dem Server dort ab,
dann wird auch ohne anderes Zutun bei jedem Start die Datei
auf dem Server geladen.Sprichst Du von einer Windows-Verknüpfung? Die per VBA
erzeugt wird?
…sondern eben nur eine Windows-Verknüpfung.
Warum Du das mit VBA tun sollen musst / willst kann ich nicht nachvollziehen.
Ggf. kann die Verknüpfung im Netzwerk auch über Group-Policies jedem User ‚verpasst‘ werden - ich würde sie aber einmal lokal bei jedem User anlegen (oder gar im Installations-Pfad von Office) und gut ist.
Mit freundlichen GrüssenThomas Ramel- MVP für MS-Excel -
Hallo Thomas,
Ich habe Deinen Code auch ohne „option explicit“ laufen
lassen … keine Veränderung (?). Dabei hatte ich immer
gedacht, mit eingeschalteter oe würde verhindert, dass
Variablen automatisch und falsch deklariert werden. Kann oe
noch etwas Anderes bewirken?
mir nicht bekannt, daß OE noch mehr bewirkt, aber es ist m.E. immer notwendig damit im Code keine Variable steht die gar nicht deklariert ist.
Denn z.B. ohne OE, oben in einem längeren Code weist du letze den Wert 5 zu.
Viel weiter unten im Code steht a=100/letz T und es kommt ein Fehler.
Dies verhindert OE zuverlässig.
Und ich verstehe dich nicht. Es kostet dich EINMALIG 2-3 Klicks und du hast immer in jedem Modul das drin stehen, mach das doch.
Hat es zum Auffinden der Fehler beigetragen?
In dem Fall, weiß nicht, glaub nicht. Gelegentlich hilft es. Wichtiger ist, nach dem ich es bei Fremdcode eingebaut habe und die Variablen kurz deklariert habe bin ich sicher daß von dieser Seite aus keinerlei Gefahr mehr droht.
Gruß
Reinhard
Fast perfekt
Hallo,
den Kopiercode in die MenuDatei zu schreiben, war natürlich Blödsinn:
Jetzt habe ich eine kleine „Pfadfinder.xls“ in xlstart und es klappt.
Darin wird folgende Code per „Private Sub Workbook_Open()“ aufgerufen:
option explicit ’ 
Sub Pfad()
'StartPfad finden und aktuelle Version des Menus dorthin kopieren
Application.EnableEvents = False ’ Ereignisse, die Makrostarts auslösen
Application.ScreenUpdating = False 'BildSchirmAusgabe
Application.Calculation = xlCalculationManual 'Berechnung
Application.DisplayAlerts = False ’ Meldungen und Rückfragen
ziel = Application.StartupPath
ex = „.TUNGELN“
Länge = Len(ziel) - Len(ex)
linkerTeil = InStr(1, ziel, ex, 1) - 1
ziel2 = Left(ziel, linkerTeil) & Right(ziel, Länge - linkerTeil)
’ Der StartOrdner lautet offline anders als online
Cells(1, 1) = ziel
Cells(2, 1) = ziel2
ActiveWorkbook.SaveAs Filename:=ziel & „\Pfadfinder.xls“, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
ActiveWorkbook.SaveAs Filename:=ziel2 & „\Pfadfinder.xls“, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
If Dir(„Y:\VORLAGEN\Excel\xlstart\TS_Menu.xls“) „“ Then
Workbooks.Open Filename:=„Y:\VORLAGEN\Excel\xlstart\TS_Menu.xls“
ActiveWorkbook.SaveAs Filename:=„c:\temp\Kopie_von_TS_Menu.xls“, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
Else: Workbooks.Open Filename:=„c:\temp\Kopie_von_TS_Menu.xls“
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
Letztes verbliebenes Problemchen:
In „Private Sub Workbook_Open()“ der MenuDatei stehen folgende Zeilen, die die nun überflüssige PfadFinder.xls schließen sollen:
„Windows(„Pfadfinder.xls“).Activate
ActiveWorkbook.Close“
Diese Zeilen stammen aus dem MakroRecorder, aber es passiert nichts.
Hat Jemand eine Idee?
Schönes Wochenende noch
Thomas
option explicit ’
Hallo Thomas,
ich weiß schon wen du da mit OE meinst 
Schön daß du es machst, behalst bei.
Mir fiel noch ein.
Wenn du dir professionellen Code mal ansiehst fällt dir sicher auf.
daß Variablen so benannt werden:
strwasauchimmerundsoweiter
Jetzt denkt man, was für eine Schreibarbeit das immer zu schreiben wenn man es mal braucht.
Falsch. Man schreibt es nur einmal.
Du schreibst nur strwas und drückst Strg+Leertaste…
Das wars.
Und wenn du in Vba fit werden willst mußt du das zumindest wissen.
Genau wie den Sinn im Namen einer Variablen als Präfix ihren Typ anzugeben, also str, int, lng usw.
Und nochmals, Programmierer sind immer von Haus aus faule Socken, wenn die so einen Aufwand betreiben MUß das großen Sinn haben.
Der erschließt sich dir wenn du mal größere Codemengen hast sehr schnell.
Man könnte auch so definieren
mstrwasauchimmerundsoweiter
gstrwasauchimmerundsoweiter
was dann bedeutet die Variable gstrwasauchimmerundsoweiter
ist eine globale Variable vom Typ String.
Google mal nach ungarische Notation.
Deinen Code schau ich mir später an.
Und logisch, abgesehen von OE, was immer da ist, bei Kleincode, paar makros mit 200 Zeilen Code halte ich mich nicht dran.
Deshalb siehste das o.g. nie von mir hier.
Gruß
Reinhard
Hallo Thomas,
das finde ich nicht gut, willste mich veräppeln?
Ich dnek ich hab mir den Mund fusselig geredet um dir irgendwas nahe zu bringen.
Sorry Sir.
Sollen dir andere weiterhelfen, ich nicht mehr, ich hätt ja auch alles hier meiner Wand erzählen können 
Ich bin raus.
Gruß
Reinhard
???
Hallo Reinhard,
was ist passiert?
Habe ich irgendetwas verpasst?
Oder verwechselst Du mich mit irgendjemandem?
???
Freundliche Grüße
Thomas ( falken )
Grüezi Thomas
…ich verstehe dein Vorgehen hier gerade nicht…???
Jetzt habe ich eine kleine „Pfadfinder.xls“ in xlstart und es
klappt.Darin wird folgende Code per „Private Sub Workbook_Open()“
aufgerufen:
Warum legst Du nicht wirklich einfach eine Windows-Verknüpfung in XLSTART (anstelle einer kompletten Datei), die faktisch nichts anderes tut, als deine zentrale Menü-Datei zu öffnen?
Das Ganze VBA-Gedöhns ist dann nicht notwendig!
Mit freundlichen Grüssen
Thomas Ramel
- MVP für MS-Excel -
Hallo Thomas,
die Vorgehensweise, eine Windows-Verknüpfung in den lokalen Startordner zu legen ist ja recht einfach und übersichtlich und mir deshalb zunächst auch sehr sympathisch.
Allerdings blockieren dann die Anwender den Zugriff auf die MenuDatei, so dass ich nur dann Änderungen an Ihr durchführen kann, wenn Alle diese Datei wieder geschlossen haben.
Außerdem hat das VBA-Gedöns den Vorteil, dass ich die ( jeweils 2 pro PC ) Startordner nicht manuell mit den Verknüpfungen bestücken muss.
Ob das den Aufwand lohnt ist sicherlich Geschmackssache.
Für die meisten Mitleser wird wohl Dein Vorschlag der passendere sein.
Schönen Sonntagabend wünscht Dir
Thomas
ich werde in diesem Leben kein Profi mehr
Hallo Reinhard,
für Deine stets ausführlichen und kompetenten Ratschläge möchte ich Dir danken - auch stellvertretend für alle Mitlesenden.
Dir sollte allerdings klar sein, dass ich als 48jähriger Ingenieur kein potentieller Nachwuchsprogrammierer sein kann. Ich will nicht perfekt werden, was die VBA-Programmierung angeht. Ich bin schon zufrieden, wenn ich ab und zu einen Code hinbekomme, der genau das macht, was er soll.
Desweiteren solltest Du nicht davon ausgehen, dass ich immer den kompletten Code hier veröffentliche, sondern nur den Teil, den ich für relevant erachte. Und ich denke, das machen Andere auch so.
Deshalb kann ich nicht ganz nachvollziehen, warum Du Dich gerade bei mir darüber aufregst, wenn nicht jeder Code mit „option explicit“ anfängt.
Ich wünsche Dir einen entspannten Sonntagabend
Thomas