Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1604to1608
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

excel über Kontextmenü im aufrufenden Verzeichnis

excel über Kontextmenü im aufrufenden Verzeichnis
08.02.2018 22:39:48
Holger
... ich weiß nicht, ob ich hier richtig bin, brauche aber Hilfe
Ich habe eine für mich gute VBA Prozedur geschrieben, um Dateinnamen vielfältig umzubenennen (einschließlich GPS-Erkennung).
In der Userform navigiere ich zu einem Verzeichnis meiner Wahl. Bislang merkt sich das Excelsheet in einer Zelle, das zuletzt gewählte Verzeichnis und verwendet es bei einem Neustart als Ausgangsverzeichnis für die neue Navigation.
Nun kann ich das Excel-Sheet auch über das Kontextmenü (Explorer Win7 und Win10) von einem beliebigen Ordner starten. Nun suche ich nach einer Lösung dem Excel-Sheet das Verzeichnis zu übergeben, von dem es über das Kontextmenü aufgerufen wurde.
Im Excel Userform:
strPfad = ActiveWorkbook.Path & "\"
' Startverzeichnis aktueller Pfad
Range("GPS!MyPath") = strPfad
' in current directory
MsgBox strPfad
' verwendet leider den Pfad der Datei
' und nicht Ordner des Aufrufs
Im Kontextmenü:
"C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" "d:\programme ohne install\exiftool\Rename JPG-Files.xlsm"
also: "Excel-Programmpfad" "ExcelsheetProgrammpfad_und_Datei"

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
09.02.2018 10:15:21
ChrisL
Hi Holger
Wie das mit dem Kontextmenü genau abläuft und wie die Zusammenhänge sind, kann ich nicht ganz nachvollziehen. Der Aufruf sieht wie "Shell" aus, aber Hauptsache die Mappe wird irgendwie geöffnet.
Mappe mit Kontextmenü:
Sub t()
Shell "C:\Program Files\Microsoft Office\Office16\EXCEL.EXE C:\Pfad\Mappe1.xlsm"
Application.Run "Mappe1.xlsm!Testmakro", strPfad
End Sub
andere Mappe:
Sub TestMakro(str As String)
ThisWorkbook.Worksheets("Tabelle1").Range("A1") = str
End Sub
cu
Chris
AW: excel über Kontextmenü im aufrufenden Verzeichnis
10.02.2018 20:33:02
Holger
ielen Dank für Deine Antwort. Leider komme ich damit noch nicht klar.
Vielleicht die Frage ohne das Kontextmenü:
Von der Dosbox (CMD) aufgerufen:
C:\temp\test moskau"spitzeKlammer"”C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" "d:\programme ohne install\exiftool\Rename JPG-Files.xlsm”
startet Excel und meine Userform, aber ich bekomme nicht heraus, dass ich das xlsm-File aus dem Verzeichnis
C:\temp\test moskau\
aufgerufen habe
weder
strPfad = ActiveWorkbook.Path & "\"
noch
strPfad = CurDir & "\"
führt mich zum Ziel
' strPfad = ActiveWorkbook.Path & "\" ' bringt d:\programme ohne install\exiftool\ zurück
' strPfad = CurDir & "\" ' bringt C:\Users\Chef\Documents\ zurück
' Range("GPS!MyPath") = strPfad ' in last Directory
Gruß
Holger
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
10.02.2018 22:33:13
Holger
Hallo Chris,
also wo ich die Lösung suche, aber nicht finde:
Private Sub Workbook_Open()
Dim strPfad As String
Application.Visible = False
strPfad = CurDir & "\"          ' bringt unter Win7 C:\Users\Chef\Documents\ zurück
Range("GPS!MyPath") = strPfad   ' und ActiveWorkbook.Path bringt den Pfad der Exceldatei  _
zurück
Call ReadDir
UserForm1.Show
' so z.B. testen um das Verzeichnis zu ermitteln, von dem die Prozedur aufgerufen wurde
' C:\temp\testmoskau"größerals""C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" "d: _
\programme ohne install\exiftool\Rename JPG-Files.xlsm"
End Sub
Gruß
Holger
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 10:43:22
ChrisL
Hi Holger
Angenommen Datei A öffnet Datei B. Dann kannst du in Datei B nicht mehr ermitteln, welche Datei den Aufruf gemacht hat. Die Info muss aus Datei A kommen.
Sub t()
Dim WB as Workbook
Set WB = Workbooks.Open("Pfad\DateiB.xlsm")
WB.Worksheets("Tabelle1").Range("A1") = "Info Datei A"
End Sub
cu
Chris
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 12:15:58
Holger
Hallo Chris,
ja Du hast wohl Recht, ich muss das Verzeichnis schon beim Aufruf übergeben.
Dann könnte ich mit GetCommandLine() weiterkommen. Aber wie jeweilige Verzeichnis dort einbauen? Das ist vielleicht mehr die Frage an ein Windows-Forum.
%1, %l oder sowas und dann noch an der richigen Stelle eingebaut... ich habe noch keine Lösung
Aber soweit schon einmal vielen Dank
Gruß
Holger
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 13:08:21
ChrisL
Hi Holger
Ich kann deine Probleme nicht nachvollziehen.
Werte zur Übergabe:
ThisWorkbook.Fullname
GetCommandline (wozu auch immer)
https://social.msdn.microsoft.com/Forums/office/en-US/0017d844-3e4a-4115-bc51-cf02ca23db0c/vba-to-fetch-excel-command-line-64-bit?forum=exceldev
Varianten zur Übergabe:
Variante 1 wie im ersten Beispiel (von Makro zu Makro)
Variante 2 wie im letzten Beitrag (Mappe beim Öffnen einem Objekt zuweisen)
cu
Chris
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 14:23:20
Holger
ich bin leider nicht clever genug mein Problem darzustellen oder Deine Hinweise zu verstehen.
Noch ein Versuch:
Ich möchte von einem beliebigen Verzeichnis Excel aufrufen und eine Exceldatei als Parameter übergeben.
Das funktioniert auch:
"C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" "d:\programme ohne install\exiftool\Rename JPG-Files.xlsm"
Jetzt möchte ich aber innerhalb von Excel VBA wissen, von welcher Stelle der Aufruf war.
ActiveWorkbook.Path & "\" zeigt an, wo die Exceldatei steht
CurDir & "\" zeigt das aktuelles Verzeichnis documents
Andere Programme geben dem Aufruf %1 mit und ermitteln damit - wie es scheint - das aufrufende Verzeichnis.
Z.B. Treesize: "C:\Program Files (x86)\JAM Software\TreeSize Free\TreeSizeFree.exe" "%1"
Vielleicht könnte ich nur Excel mit %1 aufrufen und hätte dann einlehre Excel mit aufrufendem Verzeichnis aber dann müßte ich von hier meine Exceldatei aufrufen und das Verzeichnis übergeben. Aber ich habe hier noch keinen Code drin.
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 15:46:17
ChrisL
Hi
Wie machst du denn den Aufruf?
Meine Antwort bezog sich darauf, dass du aus einer anderen Exceldatei mittels Makro aufrufst.
cu
Chris
AW: excel über Kontextmenü im aufrufenden Verzeichnis
12.02.2018 21:36:26
Holger
das steht in der Registry unter:
Directory
shell
Rename JPG-Files
command
"C:\Program Files (x86)\Microsoft Office\Office12\excel.exe" "d:\programme ohne install\exiftool\Rename JPG-Files.xlsm"
und wird im Datei-Explorer von beliebigem Verzeichnis mit rechter Maustaste als "Rename JPG-Files"baufgerufen.
Also im Prinzip äußerst praktisch, wie ich meine.
Gruß
Holger
AW: excel über Kontextmenü im aufrufenden Verzeichnis
13.02.2018 08:43:55
ChrisL
Hi Holger
OK, jetzt verstehe ich endlich was für eine Kontextmenü du meinst.
Die Lösung ist allerdings ausserhalb meiner Liga. Scheinbar muss man schwereres Geschütz auffahren (API). Vielleicht kommst du mit folgendem Link weiter.
https://groups.google.com/forum/#!topic/microsoft.public.de.excel/O6xw7nIAe5k
cu
Chris
Anzeige
AW: excel über Kontextmenü im aufrufenden Verzeichnis
13.02.2018 15:13:59
Holger
Hallo Chris,
danke für den Hinweis. Vielleicht muss ich in dieser Richtung weiter forschen:
https://www.heise.de/ct/hotline/Batch-Tricks-zum-aktuellen-Verzeichnis-3342975.html
Gruß
Holger
AW: excel über Kontextmenü im aufrufenden Verzeichnis
19.02.2018 16:13:41
Holger
Hallo Chris,
die Lösung geht über eine .bat Datei mit Inhalt:
@echo off
set par1=%1
start Excel C:\Rename_JPG-Files\Rename_JPG-Files.xlsm /e/"%par1%"
Exit
Das auseinanderfummeln im Excel Macro sieht dann ungefähr so aus:
Private Sub Workbook_Open()
Dim strPfad As String
Dim CmdRaw As Long
Dim CmdLine As String
Dim myParam As String
Dim Save_Old_Directory As String
CmdRaw = GetCommandLine
CmdLine = CmdToSTr(CmdRaw)
Range("GPS!MyPath") = Replace(Mid(CmdLine, InStr(CmdLine, "/e/") + 4), Chr(34), "") & "\"
und die Declarationen in Main:
Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineW" () As Long
Declare Function lstrlenW Lib "kernel32" (ByVal lpString As Long) As Long
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (MyDest As Any, MySource As Any, ByVal MySize As Long)
Gruß
Holger
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige