Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Exceldatei mit Parametern starten

Forumthread: Exceldatei mit Parametern starten

Exceldatei mit Parametern starten
15.04.2015 20:04:05
Björn
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?

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Exceldatei mit Parametern starten
16.04.2015 02:22:20
lupo1
Hinweis: Als "Bbbbernhard 15.04.2015, 20:11" im MS-Office-Forum crossgepostet.

AW: Exceldatei mit Parametern starten
16.04.2015 12:56:07
Björn
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.

Anzeige
AW: Exceldatei mit Parametern starten
16.04.2015 14:08:54
fcs
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

Anzeige
AW: Exceldatei mit Parametern starten
16.04.2015 17:00:14
Björn
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.

Anzeige
AW: Exceldatei mit Parametern starten
17.04.2015 09:14:18
fcs
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
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Exceldatei mit Parametern starten


Schritt-für-Schritt-Anleitung

Um eine Exceldatei mit Parametern zu starten, kannst Du folgende Schritte befolgen:

  1. Erstelle eine Verknüpfung auf die Excel-Datei, die Du öffnen möchtest.

  2. Füge die Parameter hinzu. Im Zielpfad der Verknüpfung sollte es in etwa so aussehen:

    "C:\Pfad\zu\excel.exe" "C:\Pfad\zu\DeinerDatei.xlsm" /e /ArbeitsblattName

    Hierbei ersetzt Du "C:\Pfad\zu\DeinerDatei.xlsm" mit dem Pfad Deiner Datei und ArbeitsblattName durch den Namen des Arbeitsblatts, das Du direkt öffnen möchtest.

  3. Verwende ein Makro in Deiner Excel-Datei, um den Startparameter auszulesen. Im Workbook_Open()-Event kannst Du den Parameter verarbeiten:

    Private Sub Workbook_Open()
       Dim param As String
       param = Mid(GetCommandLine(), InStrRev(GetCommandLine(), "/") + 1)
       If param = "ArbeitsblattName" Then
           Sheets("ArbeitsblattName").Activate
       End If
    End Sub
  4. Teste die Verknüpfung. Starte die Verknüpfung und überprüfe, ob das gewünschte Arbeitsblatt direkt geöffnet wird.


Häufige Fehler und Lösungen

  • Fehler: Verknüpfung startet nicht die richtige Excel-Version

    • Lösung: Stelle sicher, dass der Pfad zu excel.exe korrekt ist. Du kannst auch prüfen, ob Excel korrekt installiert ist.
  • Fehler: Arbeitsblatt wird nicht aktiviert

    • Lösung: Überprüfe, ob der Parameter im GetCommandLine() korrekt ausgelesen wird. Debugge den Code, um sicherzustellen, dass der richtige Wert verarbeitet wird.
  • Fehler: Excel öffnet mehrere Instanzen

    • Lösung: Vermeide, dass jede Verknüpfung einen neuen Excel-Prozess startet. Stelle sicher, dass nur eine Instanz von Excel läuft, bevor Du die Datei öffnest.

Alternative Methoden

Wenn die Verwendung von Excel-Startparametern nicht funktioniert, kannst Du folgende Alternativen in Betracht ziehen:

  • Startblatt in der Excel-Datei: Erstelle ein Startblatt, das Links zu den verschiedenen Belegblättern enthält. Beim Öffnen der Datei wird das Startblatt angezeigt, und der Benutzer kann das gewünschte Arbeitsblatt auswählen.

  • VB-Skripte verwenden: Diese bieten mehr Flexibilität, erfordern jedoch zusätzliche Setup-Zeit. Ein einfaches Skript kann die gewünschte Funktionalität bereitstellen, ohne die Notwendigkeit von Verknüpfungen.


Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du Deine Exceldatei mit Parametern starten kannst:

  1. Verknüpfung für ein Arbeitsblatt "Z3" erstellen:

    "C:\Program Files\Microsoft Office\root\Office16\excel.exe" "C:\Projekte\MeinProjekt.xlsm" /e /Z3
  2. Makro zur Aktivierung des Arbeitsblatts "Z4":

    Private Sub Workbook_Open()
       Dim param As String
       param = Mid(GetCommandLine(), InStrRev(GetCommandLine(), "/") + 1)
       If param = "Z4" Then
           Sheets("Z4").Activate
       End If
    End Sub

Tipps für Profis

  • Verwende Umgebungsvariablen: Statt absolute Pfade zu verwenden, kannst Du Umgebungsvariablen nutzen, um die Flexibilität zu erhöhen und Pfade an unterschiedliche Systeme anzupassen.

  • Fehlerprotokollierung: Implementiere ein einfaches Fehlerprotokoll in Deinem Makro, um Probleme beim Auslesen der Parameter besser nachvollziehen zu können.

  • Sichere den Code: Schütze Dein VBA-Projekt mit einem Passwort, um zu verhindern, dass unbefugte Benutzer Änderungen vornehmen.


FAQ: Häufige Fragen

1. Frage
Kann ich mehrere Parameter in einer Verknüpfung übergeben?
Antwort: Ja, Du kannst mehrere Parameter übergeben, indem Du sie hintereinander anhängst. Zum Beispiel: /e /Z3 /KundeA.

2. Frage
Was mache ich, wenn Excel immer noch mehrere Instanzen öffnet?
Antwort: Stelle sicher, dass Du alle Verknüpfungen überprüfst und dass sie auf die richtige Excel-Installation verweisen. Es könnte hilfreich sein, die Verknüpfungen zu konsolidieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige