ich hoffe auf Eure Hilfe, da ich bei schon sehr vielen guten Lösungsansätzen, die ich im Internet fand, nicht genau das fand, was ich gern umsetzen möchte.
Ich habe aus mehreren Excel-Vorlagen eine gemacht, um alle Vorgänge eines Projektes in einer Excel-Arbeitsmappe zusammenzufassen, die nun mehrere Arbeitsblätter enthält.
Da die jeweilige Datei aus Weiterverarbeitungsgründen auch unter verschiedenen Namen auffindbar sein soll und es unnötig ist, die gleiche Datei mehrfach mit unterschiedlichen Namen abzulegen, wird die Datei nur einmal gespeichert (*.xlsm) und ansonsten werden Verknüpfungen (*.lnk) auf diese Datei automatisiert ungefähr so erzeugt:
With CreateObject("WScript.Shell").CreateShortcut("Zielpfad" & "\" & "AndererName.xlsm.lnk")
.TargetPath = """" & "ProjektDateiPfad" & "\" & "ProjektDatei.xlsm" & """"
.WorkingDirectory = "ProjektDateiPfad"
.Save
End With
Das einzige, was sich bei den unterschiedlichen Verknüpfungen ändert, ist der "Zielpfad" und der Name "AndererName.xlsm.lnk".
So weit so gut. Nur leider ist beim Öffnen logischerweise immer das Arbeitsblatt aktiv, welches vor dem letzten Speichern aktiv war.
Es wäre aber gut, wenn man das jeweilig notwendige Arbeitsblatt in Abhängigkeit von der jeweiligen Verknüpfung direkt ohne Benutzeraktion aktivieren könnte.
Man könnte dem .TargetPath der Verknüpfung noch Argumente hinzufügen, zum Beispiel so:
.TargetPath = """" & "ProjektDateiPfad" & "\" & "ProjektDatei.xlsm" & """" & " /e/Arbeitsblatt"
In der Sub Workbook_Open() könnte man es dann auslesen und dementsprechend das hinterlegte Arbeitsblatt auswählen.
Ich habe auch schon ein paar funktionierende Lösungen gefunden, die aber alle das gleiche Problem haben, sie benötigen im .TargetPath der Verknüpfung auch die "Excelprogrammpfad" & "\" & "EXCEL.EXE".
Das Problem ist, dass die Verknüpfungen von verschiedenen Rechnern aufgerufen werden sollen. Der eine hat Excel auf C:, der andere auf D:, der nächste hat es in einem anderen Verzeichnis installiert, also Chaos pur. Außerdem möchte ich nicht, dass Excel eventuell mehrfach aufgerufen wird.
Deshalb wollte ich es eigentlich vermeiden, den Verweis auf das Excelprogramm in der Verknüpfung mit unterzubringen, stattdessen nur die ".xlsm-Datei" und dahiner " /e/Arbeitsblatt".
In meinem Makro verwende ich einen Lösungsansatz mittels "GetCommandLine" (Public Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long).
Nur liest mein Makro dann leider den Excelaufruf in der Form aus: "Excelprogrammpfad\EXCEL.EXE /e" aus, also ohne das "/Arbeitsblatt".
Das Problem ist, dass mich eigentlich der eventuell schon lange zurückliegende Programmaufruf von Excel gar nicht interessiert, sondern der spezielle Aufruf der Datei. So ist die Nutzung von "GetCommandLine" wahrscheinlich der total falsche Lösungsansatz.
Denn so rufen alle Verknüpfungen die gleiche Datei in gleicher Form auf, und wenn die Datei erst einmal offen ist, könnte ich zwar den .TargetPath aus den Verknüpfungen auslesen, nur kann ich zu diesem Zeitpunkt nicht mehr erkennen, von welcher Verknüpfung die Datei aufgerufen wurde.
Gibt es da nicht irgendeine andere intelligente und funktionierende Lösung?