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

Status von Ereignis prüfen

Status von Ereignis prüfen
21.12.2018 19:52:07
Ereignis
Guten Abend liebe Forumsgemeinde,
ich möchte aus einer Sub Prozedur heraus ein Workbook öffnen und innerhalb einer "Do Loop" Schleife prüfen ob das Workbook offen ist "ohne Dabei auf die .Name Eigenschaft zurück zu greifen".
Mit folgendem Code lande ich nach dem Öffnen des Workbooks in einer Endlosschleife:

Private Sub DoAnything()
Dim Pfad As String
Dim wb As Object
Dim Count As Long
Pfad = "C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\ _
Dividenden-Kalkulation-Pivot.xlsm"
Count = 1
Do
Set wb = Workbooks.Open(Pfad)
DoEvents
Debug.Print Count
Count = Count + 1
Loop
End Sub

Ich weiß zum Einen nicht was an meiner DoEvents Schleife falsch ist und ich frage mich ob es nicht eine Möglichkeit gäbe das Problem mit Hilfe von "Do Until" zu lösen aber ich weiß nicht wie ich abfragen kann ob das Ereignis durchgeführt wurde.
Gruß,
Marc

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Status von Ereignis prüfen
21.12.2018 20:15:14
Ereignis
Hallo Marc,
nach dem .Open ist die Datei doch geöffnet, welchen Status willst du da prüfen?
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Status von Ereignis prüfen
21.12.2018 21:09:43
Ereignis
Hallo Sepp,
es ist leider so, dass das Öffnen der Datei teilweise recht lange dauert, da der Rechner mit der neuen Office Version überfordert ist. Von daher möchte ich sicher stellen, dass die Datei tatsächlich offen ist und angezeigt wird bevor der Code weiter läuft.
Momentan ist es so, dass die Operation welche in der zu öffnenden Datei durchgeführt werden soll zwar tatsächlich durchgeführt wird aber auf dem Bildschirm erscheint sie erst Minuten später und schließt sich dann sofort wieder, so wie es der Ablauf auch vorsieht. (Das was ich hier geposted hatte ist übrigens nur ein Ausschnitt des ganzen Codes.)
Gruß,
Marc
Anzeige
AW: Status von Ereignis prüfen
21.12.2018 21:25:10
Ereignis
Hallo Marc,
dann würde ich mal den gesamten Code zeigen.
 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Status von Ereignis prüfen
21.12.2018 22:42:04
Ereignis
Der Code ist momentan im Büro von daher kann ich ihn hier jetzt nicht posten. Aber es ist folgendermaßen.
Das zu öffnende Workbook enthält eine fortlaufende Liste mit Lognummern. Das Makro generiert nach dem Öffnen eine neue Lognummer, die an die letzte anknüpft, trägt diese in das Workbook ein und schließt das Workbook wieder. Letztlich funktioniert das auch ganz wunderbar, bis auf das beschriebene Phänomen, dass man den Vorgang des Öffnens überhaupt nicht sieht und das Workbook dann Minuten später seltsamerweise nochmal aufgeht, so als ob der Vorgang praktisch Minuten im Speicher gehangen hätte und erst dann abgearbeitet worden wäre.
Anzeige
AW: Status von Ereignis prüfen
21.12.2018 23:12:13
Ereignis
Hallo Marc,
normalerweise will man die geöffnete Datei ja gar nicht sehen!
Private Sub DoAnything()
  Dim Pfad As String
  Dim wb As Object
    
  On Error GoTo ErrorHandler
  
  Pfad = "C:\Users\Public\Geldanlage & Börse\Pivot Tabellen & Auswertungen\Dividendenbewertung\Dividenden-Kalkulation-Pivot.xlsm"

  With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
  End With

  Set wb = Workbooks.Open(Pfad)

  With wb
    'dein Code was immer der auch macht! 
    .Calculate
    .Close True
  End With
         
ErrorHandler:
        
  With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
  End With

  Set wb = Nothing
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Status von Ereignis prüfen
22.12.2018 00:00:24
Ereignis
Da hast Du im Grunde Recht aber es gibt Leute, die es verunsichert wenn sie nicht mit eigenen Augen sehen, dass die Nummer in das Workbook bzw. Logsheet eingetragen wurde.
Ich interpretiere Deinen Code so, dass er praktisch das Öffnen des Workbooks bewusst nicht darstellt und somit auch ausgeschlossen ist, dass sich es später irgendwann wie von Geisterhand nochmal öffnet. Darüber könnte man nachdenken auch wenn es eigentlich nicht die Lösung ist, die mir vorgeschwebt ist. :)
AW: Status von Ereignis prüfen
21.12.2018 21:00:26
Ereignis

Do
Set wb = Workbooks.Open(Pfad)
DoEvents
Debug.Print Count
Count = Count + 1
Loop

Ja klar, du hast ja auch eine klassische Endlosschleife programmiert. Wann wird denn deiner Meinung nach die Schleife verlassen?
Du hast zwar eine Variable "Count", die bei jedem Durchgang erhöht wird, aber sie hat keinerlei Einfluss auf die Schleife, da du das nicht einprogrammiert hast.
Anzeige
AW: Status von Ereignis prüfen
21.12.2018 21:14:20
Ereignis
Hallo Onur,
der Count ist nur für mich um zu Überprüfen nach dem wievielten Durchlauf die Schleife verlassen wird.
Nachdem das Worksheet offen ist sollte im Speicher des Betriebssystems keine Ausgabe mehr vorhanden sein, die abgearbeitet werden muss und die Schleife müsste verlassen werden war meine Annahme.
Wo liegt denn mein Fehler?
AW: Status von Ereignis prüfen
21.12.2018 21:15:30
Ereignis
..keine Aufgabe meine ich natürlich.
AW: Status von Ereignis prüfen
21.12.2018 21:23:38
Ereignis
DU musst schon der Schleife sagen, wann sie verlassen werden soll, das macht sie nicht automatisch.
Woher soll denn der Code wissen, wann ? Er kann nicht deine Gedanken lesen.
Selbst wenn es einen Excel-Befehl "Verlasse die Schleife, sobald im Speicher des Betriebssystems keine Ausgabe mehr vorhanden ist" - nennen wir ihn "ExIfReady" - gäbe, müsstest du schon den Befehl "ExIfReady" in die Schleife hineinschreiben.
Anzeige
AW: Status von Ereignis prüfen
21.12.2018 22:30:19
Ereignis
Ok, verstehe. Das heißt ich muss eine entsprechende Abfrage machen, die mir sagt ob noch Events im Speicher abzuarbeiten sind (True) oder ob der Speicher leer ist(False) und sobald er leer ist kann ich die Schleife verlassen.
Könntest Du mir vielleicht auf die Sprünge helfen wie die Eigenschaft sich nennt, die ich dieser Boolean Variable zuweisen muss?
AW: Status von Ereignis prüfen
22.12.2018 01:04:47
Ereignis
Du kannst diese Funktion in ein Modul (ggf ein Modul hinzufügen) schreiben:
Function MappeOffen(MappeName As String) As Boolean
Dim StName As String
On Error GoTo Nonexistent
StName = Workbooks(MappeName).Name
MappeOffen = True
Exit Function
Nonexistent:
MappeOffen = False
End Function 

Dann kanst du sie in die Schleife einbauen:
    Do
DoEvents
Workbooks.Open "DeineDatei.xlsm"
If MappeOffen("DeineDatei.xlsm") Then Exit Do
Loop
MsgBox "Datei geöfnet"

Anzeige
AW: Status von Ereignis prüfen
22.12.2018 09:28:33
Ereignis
Guten Morgen Onur,
wie Eingangs erwähnt möchte ich dieses Statusabfrage ja gerade nicht über die Name-Eigenschaft des Workbooks durchführen.
Ich möchte erst dann fortfahren mit dem Code wenn alle VBA-Events im Speicher des Betriebssystems abgearbeitet wurden.
AW: Status von Ereignis prüfen
22.12.2018 09:41:32
Ereignis
"wenn alle VBA-Events im Speicher des Betriebssystems abgearbeitet wurden" - es gibt keine VBA-Events im Speicher des Betriebssystems!
Du weisst ja offensichtlich nicht einmal, was ein Event ist.
Events werden nicht abgearbeitet, es sind Ereignisse und werden z.B. durch einen Mouseklick AUSGELÖST.
Diese Ereignisse KANN man mit VBA abfangen, in dem man in die Event-Sub einen Code hineinschreibt.
Dieser Code wird dann bei Auftreten des Ereignisses ausgeführt.
Das Open-Ereignis der Datei, die du öffnen willst, wird nur nach Öffnen der Datei IM CODE DER GERADE GEÖFFNETEN DATEI ausgelöst (WENN da ein Code stehen würde) , und nicht im Code der aufrufenden Datei.
Anzeige
AW: Status von Ereignis prüfen
22.12.2018 14:08:52
Ereignis
Dann war ich bislang mit dem Begriff Event tatsächlich nicht richtig vertraut. Danke für den Hinweis!
Das heißt also das DoEvents für diesen Zweck vollkommen ungeeignet ist, korrekt?
Gibt es denn keine Möglichkeit über eine Eigenschaft des Workbooks abzufragen ob es bereits sichtbar ist oder ob der Vorgang des Öffnens abgeschlossen ist? Falls ja, könnte man ja beispielsweise mit DoUntil das Problem lösen.
AW: Status von Ereignis prüfen
22.12.2018 16:05:49
Ereignis
"Gibt es denn keine Möglichkeit über eine Eigenschaft des Workbooks abzufragen ob es bereits sichtbar ist oder ob der Vorgang des Öffnens abgeschlossen ist?" - Nein.
Warum nicht über den Namen? DEN musst du ja sowieso auch zum Öffnen der Datei benutzen.
Warum nicht mit 5 sec Pause?
AW: Status von Ereignis prüfen
22.12.2018 11:21:13
Ereignis
Du könntest jedoch eine Pause von z.B. 5 sec einbauen - bis dahin müsste die Datei wohl geöffnet sein.
dim ti
ti=timer
while timer-ti

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige