Excel97 nur EINMAL öffnen

Hallo eggheads
Beim Oeffnen von Excel wird ja auch das ausgeblendete PERSONL.XLS geöffnet. Wenn ich dann nicht beachte, dass Excel schon offen ist und es ein zweites Mal anklicke, kommt die Meldung, dass das PERSONL.XLS schon von jemand anderem benützt wird. So weit so gut, resp. theoretisch korrekt, aber etwas nervig.
Als Benutzer hätte ich viel lieber, dass das Programm gar nicht „versucht“ ein zweites Mal zu öffnen. Wie kann ich das machen? Gibt es einen undokumentierten Schalter oder etas ähnliches?

PS z.B. in DELPHI kann ich prüfen, ob die Datei schon offen ist und dann den neuen öffnen-Befehl einfach ignorieren.

Ich hoffe auf schlauen Tipp
Erich

Hi Erich,

a) Personal.xls
Start–Suchen–person*.xls
Rechtsklick und bei Eigenschaften schreibgeschützt einstellen
(geht schneller als mit Explorer durch Verzeichnisse hangeln, und es gibt ja personal und personal deshalb der Stern)

b) nur eine Excel-Instanz darf laufen. (Schritt b) empfiehlt sich vor Schritt a) durchzuführen *g)
In personal.xls bzw personl.xls in „DieseArbeitsmappe“:

Private Sub Workbook\_Open()
If ExcelInstanzen() \> 1 Then
 MsgBox "Excel läuft schon, diese Excel-Instanz wird geschlossen"
 Application.Quit
End If
End Sub

In „Modul1“:

Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, \_
 ByVal wCmd As Long) As Long
Private Declare Function GetClassName& Lib "user32" Alias \_
 "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName \_
 As String, ByVal nMaxCount As Long)
Private Const GW\_CHILD = 5
Private Const GW\_HWNDNEXT = 2
Function ExcelInstanzen() As Long
Dim Länge&, Instanzen&, hwnd&
Dim Klassenname As String
hwnd = GetWindow(GetDesktopWindow, GW\_CHILD)
Do
 Klassenname = String(51, 0)
 Länge = GetClassName&(hwnd, Klassenname, 50)
 If Left(Klassenname, Länge) = "XLMAIN" Then Instanzen = Instanzen + 1
 hwnd = GetWindow(hwnd, GW\_HWNDNEXT)
Loop While hwnd 0
ExcelInstanzen = Instanzen
End Function

Gruß
Reinhard

Beim Oeffnen von Excel wird ja auch das ausgeblendete
PERSONL.XLS geöffnet. Wenn ich dann nicht beachte, dass Excel
schon offen ist und es ein zweites Mal anklicke, kommt die
Meldung, dass das PERSONL.XLS schon von jemand anderem benützt
wird. So weit so gut, resp. theoretisch korrekt, aber etwas
nervig.
Als Benutzer hätte ich viel lieber, dass das Programm gar
nicht „versucht“ ein zweites Mal zu öffnen. Wie kann ich das
machen? Gibt es einen undokumentierten Schalter oder etas
ähnliches?

Hi Reinhard

Das funzt ja phänomenal! Vielen Dank.
Jetzt muss ich nur noch Schritt um Schritt verstehen, was da genau aubläuft.
Die msgbox habe ich gleich auskommentiert, da ich gar nicht wissen will, ob Excel etwas zu meckern hat; ich will einfach mit Excel arbeiten.
Immer eine Freude, bei w-w-w zuvorkommende Leute zu wissen!
Erich

sachma biste Schotte?
schon wieder keinen Stern *rummaul* *motz* :smile:
Hi Erich,
das mit Sternen bedeutet mir nothing, mir wärs viel liebr die leute würden mal feedback geben, obs läuft oder nicht läuft, weil wenns läuft isses für mich abgehakt, wenn nicht kann man was dran ändern, aber oft, zu oft, kommt garnix :frowning:
Ach, egal, die Welt ist halt so.
Was ich an sich sagen wollte, hatte den Code ja getestet, und muss ehrlich sagen, ich starte da Excel, kommt ne Meldung „läuft schon“ und ich sah den Desktop von Windows und schaute irritiert/konsterniert usw.
Das ist/war frustrierend. Nur ein Bild von Bill Gates kann das toppen *g
Deshalb habe ich mal woanderster, da wo die Excelkönner sind, nachgefragt wie man denn dann das Fenster der ersten ExcelInstanz einblenden kann, anstatt des Desktops. Mal schauen was kommt.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Reinhard

schon wieder keinen Stern *rummaul* *motz* :smile:

Ich wiederhole mich: Deine Lösung ist einfach GENIAL und läuft perfekt!! Jetzt liefere ich auch noch ein Sternchen nach, leider gibt es keine XXL-stars!
Danke
Erich