Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

excel über Kontextmenü im aufrufenden Verzeichnis


Betrifft: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 08.02.2018 22:39:48

... 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"

  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: ChrisL
Geschrieben am: 09.02.2018 10:15:21

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 10.02.2018 20:33:02

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



  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 10.02.2018 22:33:13

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: ChrisL
Geschrieben am: 12.02.2018 10:43:22

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 12.02.2018 12:15:58

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: ChrisL
Geschrieben am: 12.02.2018 13:08:21

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 12.02.2018 14:23:20

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.


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: ChrisL
Geschrieben am: 12.02.2018 15:46:17

Hi

Wie machst du denn den Aufruf?
Meine Antwort bezog sich darauf, dass du aus einer anderen Exceldatei mittels Makro aufrufst.

cu
Chris


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 12.02.2018 21:36:26

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: ChrisL
Geschrieben am: 13.02.2018 08:43:55

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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 13.02.2018 15:13:59


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


  

Betrifft: AW: excel über Kontextmenü im aufrufenden Verzeichnis von: Holger Göllnitz
Geschrieben am: 19.02.2018 16:13:41

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


Beiträge aus dem Excel-Forum zum Thema "excel über Kontextmenü im aufrufenden Verzeichnis "