Microsoft Excel

Herbers Excel/VBA-Archiv

Exceldatei mit Parametern starten

Betrifft: Exceldatei mit Parametern starten von: Björn
Geschrieben am: 15.04.2015 20:04:05

Hallo,

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?

  

Betrifft: AW: Exceldatei mit Parametern starten von: lupo1
Geschrieben am: 16.04.2015 02:22:20

Hinweis: Als "Bbbbernhard 15.04.2015, 20:11" im MS-Office-Forum crossgepostet.


  

Betrifft: AW: Exceldatei mit Parametern starten von: Björn
Geschrieben am: 16.04.2015 12:56:07

Hallo,

ich möchte mal genauer präzisieren, wie das bisher abläuft. Die Ziffer 9 steht hier jeweils als Platzhalter für eine beliebige Ziffer.

Projekte haben einen eigenen Nummernkreis, wie z. B. AB9999. Jedes Projekt kann von keinem bis zu derzeit 7 Belege haben, die einen eigenen Nummernkreis haben, wie z. B. CD99999.

Jeder Beleg hat eine eindeutige Belegart, hier mal als Z1 bis Z7 bezeichnet. Jede Belegart taucht maximal nur einmal pro Projekt auf.

Ein Projekt besteht also mindestens aus dem Arbeitsblatt "AB", welches die Projektstammdaten enthält und aus bis zu 7 Belegen, deren Arbeitsblätter ebenfalls nach der Belegart benannt sind.

Beim Speichern wird immer die Arbeitsmappe in den entsprechenden Ordner "…\ABs" gespeichert, nach dem Schema "AB999 - Kundenkurzwort - Projektkurzwort".

Jeder Beleg hat einen Knopf zum Erzeugen der Verknüpfung. Der Verknüpfungsname wird aus Tabellenzellen zusammengestellt und automatisch im entsprechenden Ordner "…\Belege" erstellt, nach dem Schema "CD99999 - Z9 - Kundenkurzwort - Kurzbeschreibung".

Aus dem Verknüpfungsnamen ergibt sich also ebenfalls schon die Belegart und damit das jeweilige Arbeitsblatt.

Alle Verknüpfungen eines Projektes verweisen aber auf die gleiche Arbeitsmappe "AB999 - Kundenkurzwort - Projektkurzwort" im Ordner "…\ABs". Sie unterscheiden sich ausschließlich durch den Verknüpfungsnamen und eventuelle Parameter, die ich automatisiert dazu schreiben könnte.

Da ich es aber nicht schaffe, einen in der Verknüpfung untergebrachten Parameter an den Makro Workbook_Open() der Arbeitsmappe zu übergeben, weiß ich im Moment des Öffnens nicht, welche Verknüpfung genau nun den Aufruf der Arbeitsmappe gestartet hat.

Es ist leider keine Lösung, Excel auf dem Netz zu installieren, das bekäme ich nicht genehmigt.

Zumal ich auch bei der Vielzahl von Belegaufrufen nicht jedes Mal eine neue Excelinstanz öffnen möchte, da es Nutzer gibt, die generell niemals Anwendungen schließen und die dann zig Excelinstanzen geöffnet hätten. Das möchte ich also auf jeden Fall vermeiden.

Leider grüble und recherchiere ich heute schon den 4. Tag an diesem Problem und komme hier einfach nicht weiter.


  

Betrifft: AW: Exceldatei mit Parametern starten von: fcs
Geschrieben am: 16.04.2015 14:08:54

Hallo Björn,

Links sind Einbahnstrassen. Links "wissen" welche Datei/Anwendung sie starten sollen, die Datei/Anwendung hat aber keine Informationen von wo aus sie gestartet wurde.
Ich kenne auch keinen Excel-Start-Parameter, mit dem das Blatt der zu öffnenden Datei übergeben werden werden kann.

Warum machst du dir das Leben so schwer?
Statt viele Verzeichnisse mit Links anzulegen, hätte ich in den Dateien ein Startblatt angelegt mit Verknüpfungen zu den verschiedenen Belegblättern. Beim Öffnen der Datei wird über Workbook_Open dann immer das Startblatt angezeigt und der Anwender kann das gewünschte Belegblatt auswählen.

Eine Alternative zu den Links wären ggf. VB-Scripte, diese sind etwas Aufwendiger beim Anlegen, da immer ein kleines Scriptfile generiert werden muss. Aber sie bieten mehr Flexibilität in der Funktionalität.

Gruß
Franz


  

Betrifft: AW: Exceldatei mit Parametern starten von: Björn
Geschrieben am: 16.04.2015 17:00:14

Hallo Franz,

Du hast ja im Prinzip recht, ich versuche eine alte bestehende Struktur aufrecht zu erhalten, die so eigentlich nicht mehr notwendig wäre, da es ja jetzt pro Projekt nur noch eine einzige Arbeitsmappe gibt und nicht mehr bis zu 8 Einzeldateien.

Ich hatte versucht, den Nutzern ihr altes, seit Jahren gewohntes Verhalten zu erhalten. Sie öffnen Beleg "CD01234 - Z3 - Kunde A - Arbeitsvorbereitung", merken gar nicht, dass sie in Wirklichkeit die Arbeitsmappe "AB012 - Kunde A - Projekt A" aufmachen und springen automatisch direkt in das Arbeitsblatt "Z3".

Beim Speichern wird mittels Workbook_BeforeSave zusätzlich je nach Arbeitsblatt eine Verknüpfung angelegt, so dass die Nutzer ihren Beleg genauso finden, wie vorher auch.

Nur muss man jetzt leider mitdenken und seinen zu bearbeitenden Beleg erst auswählen und damit scheinen einige tatsächlich überfordert zu sein und das Gejammer ist groß: "Vorher war alles besser...!"

Dass man jetzt alle Belege eines Projektes in einer einzigen Arbeitsmappe zusammen hat und nicht mehr alles erst suchen und extra öffnen muss, dieser Vorteil erschließt sich anscheinend irgendwie nicht allen.

Deshalb wollte ich das irgendwie mittels Verknüpfungen lösen, um alle Nutzer zufrieden zu stellen, aber inzwischen sehe ich, dass das wohl doch nicht so einfach ist, wie ich ursprünglich dachte.


  

Betrifft: AW: Exceldatei mit Parametern starten von: fcs
Geschrieben am: 17.04.2015 09:14:18

Hallo Björn,

eine Variante zur Anzeige des letzten bearbeiteten Belegs eines Users ist mir noch eingefallen.

In einem unsichtbaren Blatt werden die Usernamen erfasst, die die die Datei öffnen. Vor dem Schließen der Datei oder vor dem Speichern wird zu dem Usernamen dann in dem Blatt eingetragen das aktive Blatt und die aktive Zelle. Beim Öffnen der Datei wird dann der Username in dem Blatt gesucht und zu dem registrierten Blatt gewechselt und zur registrierten Zeile der Zelle gescrollt.

Damit kommen die Anwender evtl. besser zurecht als mit angelegten Verknüpfung.

Gruß
Franz


 

Beiträge aus den Excel-Beispielen zum Thema "Exceldatei mit Parametern starten"