Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Excelinstanzen zählen?

Excelinstanzen zählen?
Hübi
Hallo zusammen,
die Exceluser in unserer Firma benutzen öfter zwei oder gar mehr Excelinstanzen und wundern sich
dann, dass einige Aktionen schief gehen.
Kann man mit VBA feststellen, ob und wieviel Excelinstanzen bereits geöffnet sind und dem user
einen Hinweis geben?
Sahnehäübchen wäre, diese Instanze(en) gleich, nach Rückfrage, zu schließen.
Grüße Hübi
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Bin zwar kein Profi aber....
28.08.2009 18:58:51
Steffen
Probier mal folgende Datei:
https://www.herber.de/bbs/user/64097.xls
beim öffnen dieser erfolgt die Abfrage,wenn also mehr als eine Arbeitsmappe bereits offen ist...
viele Grüße Steffen
Danke, aber...mT
28.08.2009 19:26:48
Hübi
Hi Steffen,
es geht ja nicht um mehrere Workbooks, die können ja offen sein, aber nur in einer einzigen
Excelinstanz.
Grüß Hübi
Anzeige
AW: Danke, aber...mT
28.08.2009 20:36:13
Nepumuk
Hallo Hübi,
versuch es mal so:
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function EnumWindows Lib "user32.dll" ( _
    ByVal lpEnumFunc As Long, _
    ByVal lParam As Long) As Boolean
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" ( _
    ByVal hwnd As Long, _
    ByVal lpString As String, _
    ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" ( _
    ByVal hwnd As Long) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
    ByVal hwnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
    ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long

Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Const WM_CLOSE = &H10

Public Sub Start()
    Call EnumWindows(AddressOf WindowCallBack, ByVal 0&)
End Sub

Private Function WindowCallBack(ByVal lnghWnd As Long, ByVal lngParam As Long) As Boolean
    Dim strCaption As String, strClassName As String
    Dim lngReturn As Long
    strClassName = Space$(256)
    lngReturn = GetClassName(lnghWnd, strClassName, 256)
    If Left$(strClassName, lngReturn) = GC_CLASSNAMEMSEXCEL Then
        lngReturn = GetWindowTextLength(lnghWnd)
        strCaption = Space$(lngReturn)
        Call GetWindowText(lnghWnd, strCaption, lngReturn + 1)
        If strCaption <> Application.Caption Then
            If MsgBox(strCaption & vbLf & vbLf & "Schließen?", _
                vbQuestion Or vbYesNo, "Abfrage") = vbYes Then _
                Call PostMessage(lnghWnd, WM_CLOSE, 0&, 0&)
        End If
    End If
    WindowCallBack = True
End Function

Gruß
Nepumuk
Anzeige
Das ist der Hammer, danke! oT
28.08.2009 20:48:41
Hübi
oT
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige