AW: mit Makro ermitteln wie die Mappe geöffnet wurde
15.09.2016 09:10:18
Joni
Hallo Nepumuk,
mir sind noch 2 Ansätze eingefallen.
Prozesslaufzeit
Ist es möglich die Laufzeit des betroffenen Excel-Prozesses zu ermitten? Daraus könnte geschlossen werden ob Excel vorher schon gestartet war oder nicht. Evtl. könnte es ein Problem geben wenn mehrere Excel-Instanzen laufen, es müsste die Instanz geprüft werden, in der das Workbook_Open-Event ausgelöst wurde.
Startparameter löschen
Ich ermittle mit nachfolgender Funktion mit welchem Parameter Excel aus der Batchdatei heraus gestartet wurde. Leider merkt sich Excel den Startaufruf so lange bis es geschlossen wurden. Wenn also nur die Mappe geschlossen wird, ist der Wert immer noch vorhanden. Da beim nochmaligen Öffnen (hier eben meistens über Datei Öffnen) die Mappe zwar ohne Parameter geöffnet wird, Excel den Wert aber noch gespeichert hat, reagiert die Mappe wieder auf den Parameter, was sie aber in dem Fall nicht soll. Wenn ich den Wert somit auf Nothing oder Ähnliches setzen könnte wäre mein Problem auch gelöst.
Siehst du bei einer dieser beiden Varianten evtl. einen Ansatz?
Danke für deine Hilfe.
Gruß Joni
PS
Scheinbar wird bei der Code-Darstellung beim Wort Funktion (mit c) immer eine neue Zeile begonnen, was zur nachfolgenden Darstellung führt. Das Declare müsste eigentlich vor dem Wort Funktion stehen. Müsste ich hier beim Einfügen des Codes etwas Spezielles beachten? Dies gilt sogar im laufenden Text.
Option Explicit
Option Base 0
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)
Function CmdToSTr(Cmd As Long) As String
Dim Buffer() As Byte
Dim StrLen As Long
If Cmd Then
StrLen = lstrlenW(Cmd) * 2
If StrLen Then
ReDim Buffer(0 To (StrLen - 1)) As Byte
CopyMemory Buffer(0), ByVal Cmd, StrLen
CmdToSTr = Buffer
End If
End If
End Function
Sub CmdToSTr_TEST()
Dim lCmdRaw As Long, sCmdLine As String, sCmd As String
lCmdRaw = GetCommandLine
sCmdLine = CmdToSTr(lCmdRaw)
Debug.Print sCmdLine
sCmd = Mid(sCmdLine, InStr(1, sCmdLine, "/e/") + 3, 99)
Debug.Print sCmd
End Sub