Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1512to1516
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

mit Makro ermitteln wie die Mappe geöffnet wurde

mit Makro ermitteln wie die Mappe geöffnet wurde
14.09.2016 13:32:53
Joni
Hallo,
kann ich im Workbook_Open-Event ermitteln ob die Mappe durch Aufruf im Filesystem oder über den Datei-Öffnen-Dialog geöffnet wurde? Wenn aus dem Filesystem, dann wäre es zusätzlich noch hilfreich ob mit der Mappe auch Excel gestartet wurde oder ob Excel schon gelaufen ist und nur die Mappe geöffnet wurde.
Danke für eure Hilfe.
Gruß Joni

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
mit Makro ermitteln wie die Mappe geöffnet wurde
14.09.2016 15:02:01
Nepumuk
Hallo,
da sehe ich keinen Ansatz.
Gruß
Nepumuk
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

Anzeige
to batch or not to batch
15.09.2016 16:26:04
Michael
Hi,
speichere das mal in "Diese Arbeitsmappe":
Private Sub Workbook_Open()
Dim p$
p = ThisWorkbook.Path
If Dir(p & "\blubb.txt")  "" Then
MsgBox "geöffnet MIT blubb.txt"
Kill (p & "\blubb.txt")
Else
MsgBox "geöffnet OHNE blubb.txt"
End If
End Sub

(bevor man Code ins Forum kopiert, drück man den Code-pre-Button, und zwischen die zwei Tags kommt dann der Code, dann paßt's)
In der Datei findest Du das Makro und insbesondere die korrespondierende DOS-Session: dort ist eine beliebige, kleine Datei vorhanden, die in der Batch-Datei auf den Namen "blubb.txt" kopiert wird, direkt vor dem Aufruf von Excel.
Datei: https://www.herber.de/bbs/user/108203.xlsm
Schöne Grüße,
Michael
Anzeige
AW: to batch or not to batch
15.09.2016 18:08:49
Joni
Hallo Michael,
danke für deine Ansatz. Das ist dann meine Notlösung die ich eigentlich vermeiden wollte, da ich ohne zusätzliche Files (sprich Fehlerquellen) auskommen wollte. Da mehrere User mit der Mappe gleichzeitig (schreibgeschützt) arbeiten, müsste diese Variante dann noch personalisiert werden. Wenn es nicht anders geht, dann bleibt mir aber wohl nichts anderes übrig. Trotzdem nochmal danke.
Zum Thema Code. Da war ich wohl irgendwo anders unterwegs. Ich habe ihn in .code> ... .> geschrieben (Punkte wegdenken). Diese Kennzeichnung scheint in dem Fall etwas "anders" zu funktionierern. Naja Macht der Gewohnheit. Auch für diese Aufklärung danke ;-)
Schöne Grüße
Joni
Anzeige
AW: to batch or not to batch
16.09.2016 14:21:09
Michael
Hi Joni,
naja, das ist immer schwierig bis instabil zu handeln; um eine definitive Datenkonsistenz zu erreichen, ist für meinen Geschmack eine "Datenbank" einzusetzen: es muß ja nicht gleich Access sein.
Es gibt Treiber für Zugriff z.B. auch für SQLite; auch Excel ist "datenbankmäßig" einsetzbar: lies doch mal http://www.online-excel.de/excel/singsel_vba.php?f=135
Ich habe letzteres noch nicht in der Praxis getestet, aber vielleicht wäre es ein Ansatz.
Schöne Grüße,
Michael
AW: to batch or not to batch
19.09.2016 09:51:00
Joni
Hallo Michael,
da sieht man wieder mal, dass eine kleine Idee auch schon mal größere Auswirkungen haben kann. Ich habe mich zwischenzeitlich doch für das Textfile entschieden. Habe aber die Variante gewählt, dass ich gleich den Parameter auch in das File schreibe und nicht über den Programmaufruf an Excel übergebe. Da das File nur kurze Zeit existiert und dann gleich wieder gelöscht wird, gehe ich das Risiko ein ;-)
Es funktioniert so wie es soll, aber das war zu erwarten.
Nochmal danke für deine Überlegungen und schöne Grüße!
Joni
Anzeige
na fein, danke für die Rückmeldung,
19.09.2016 16:27:01
Michael
Joni,
man sollte schon meinen, daß es hinhaut, und ich würde es sehr wahrscheinlich auch mal laufen lassen.
Ich habe nochmal herumgeschnüffelt: https://www.wintotal.de/die-kommandozeile-unter-windows/
Insbesondere bin ich auf >> gestoßen; damit ließe sich eine .bat wie folgt anlegen:
copy bla.txt blubb.txt
set >>blubb.txt
Dann enthält blubb.txt nämlich das komplette Environment des Aufrufs, insbesondere den USERNAME usw., falls Du den auswerten wolltest.
Eine weitere Geschichte, die 1 unerwünschten, "gleichzeitigen" Zugriff regeln könnte, wäre das Einfügen von
attrib blubb.txt +r
damit ist das Ding schreibgeschützt, und ein weiterer Zugriff führt zu einer Fehlermeldung bei der Abarbeitung der .bat (da war doch noch was mit err-Abfrage?)(genau, der ERRORLEVEL: schau mal bitte in http://de.wikipedia.org/wiki/Liste_von_Kommandozeilenbefehlen_(DOS) unter "IF").
Vor dem Löschen mußt Du das dann natürlich nochmal mit -r aufrufen (in der Batch-Datei bzw. mit Excel-Shell), sonst geht der del bzw. kill nicht...
Viel Spaß beim Basteln & Grüße,
Michael
Anzeige
Neues Hobby ...
21.09.2016 13:22:32
Joni
Hallo Michael,
du hängst dich da ja voll rein :-). In meiner Umgebung sollte die "einfach" Lösung reichen, da jeder User einen Arbeitsordner für die Mappe hat. Somit kommen sich die User nicht in die Quere. Wenn ich mal etwas Zeit habe schaue ich mir deinen Vorschlag nochmal etwas genauer an, nur um ggfl. für die Zukunft gerüstet zu sein.
Schöne Grüße
Joni

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige