none
Kurioses Verhalten von VbModeless RRS feed

  • Frage

  • Moinsen.

    Leider verzweifel ich gerade an einem etwas kuriosem Verhalten von VbModeless in Excel 2003 / VBA.

    Hintergrund ist, dass ich beim Laden der Hauptuserform enorm viel Daten verarbeite, was natürlich etwas länger dauert.

    Bervor der Nutzer die Geduld verliert, weil keine Userform erscheint habe ich mich für eine vorgeschaltete Userform entschieden, die den Status des Ladens anzeigt.

     

    Im Prinzip sieht das Ganze dann so aus:

     Im Bereich workbook_open()...

      Userform1.Show VbModeless

      unload  Userform1

      HauptUserform.Show VbModeless

      ...

    Jetzt zu meinem Problem:

    Bei eingeschaltetem Macroeditor funktioniert das Ganze problemlos.

    Beide Userformen reagieren immer so wie erwartet bei Start über workbook_open().

    Starte ich nun die Arbeitsmappe vom Desktop aus (ohne VBA Editor geöffnet) dann funktioniert das beim ersten mal auch problemlos.

    Schließe ich nun das Programm (und Excel) komplett und führe es erneut aus stürtzt Excel mit dem 401-Fehler (Öffnen einer Userform währen eine andere bereits offen ist) komplett ab und zwar nach Beendigung der ersten Userform und vor dem Start der zweiten Hauptuserform..

    Natürlich habe ich verschiedene Lösungsansätze verfolgt.

    Dazu gehört:

    - Kleine Warteschleife vor Öffnen der 2. Userform.

    - Externes sowie internes schließen der Userform1 vor Start der Hauptuserform,

    - Start beider Userformen über ontime,

    - Abfangen des kompletten Ausführens von HauptUserform_Initialize vor dem eigentlichen Öffnen, da ja bei jeder Änderung eines Items diese ausgeführt wird.

    Eigentlich deutet alles darauf hin, dass irgendein kleiner Teil des Proggies nach Beendigung resistent im Speicher bleibt.

    Nur wieso stürtzt er beim Laden der Hauptuserform ab und nicht schon beim Laden der ersten Userform?

    Wieso ist dann anscheinend der Teil dann VbModal, denn sonst sollte das ja funktionieren?

     

    Fragen über Fragen.

    Ich hoffe es gibt Irgendjemanden, der selbst schon vor dem Problem stand oder ich sehe den Wald vor lauter Bäumen nicht :(

     

     

    Grüsse

    Matthias

     

     

    • Verschoben Thorsten Dörfler Mittwoch, 22. Dezember 2010 06:33 Office VBA (aus:Visual Basic (ab Version 2002 / .NET))
    Dienstag, 21. Dezember 2010 23:26

Alle Antworten

  • Hallo Matthias,

    mit Excel-Userformen kenne ich mich nicht so aus. Aber vielleicht lässt sich mit dem Timing der Anzeigen so etwas verbessern:

    Deine ganzen Ladeoperationen in der HauptUserform verschiebst Du nach
     Public Sub zeigeHUF(optional auch mit Parametern) innerhalb der HauptUserform.

    Darin fügst Du zum Schluss Me.Show ein.

    Deine HauptUserform sollte vbModal(ist bei Word-VBA Default) gestartet werden. Du erwartest doch sicher irgendeine Reaktion des Anwenders.

    Im Modul rufst Du so auf:

     Userform1.Show VbModeless
     Unload  Userform1 'eventuell vorher noch DoEvents
     HauptUserform.zeigeHUF
     'oder jetzt erst Unload  Userform1

    Alternativ kannst Du den Aufruf der Userform1 auch in eine Klasse packen und beim Terminieren der Klasse Unload Userform1 ausführen, was sicher zur Zerstörung des Objektes führt.

    Hang loose, Hartwig

    • Bearbeitet haklesoft Donnerstag, 23. Dezember 2010 10:48 Korrektur
    Donnerstag, 23. Dezember 2010 10:40
  • Danke für Deine Antwort.

    Ich hatte ja schon versucht, das Ganze auszulagern.

     

    Die HUF Modal anzuzeigen ist nicht das Problem, ich könnte ja auch die UserForm1 Modal darstellen (wie auch alle anderen Userformen im Proggie).

    Was mich nur wundert ist das unterschiedliche Verhalten von Excel wie oben beschrieben bzw. dann das Problem, wenn ich die HUF Modal anzeige, dass ich kein VbModeless mehr nutzen kann für die Userform1.

    Diese (Userform1) ist eigentlich nur eine Userform mit einem Label drinnen, welches zur Information geändert wird.

    Dieses (UF1) soll Aufpoppen, wenn eine längere Rechnung der HUF ansteht und das geht ja nur mit Modeless in der UF1 und das verträgt sich nur mit der HUF, wenn diese auch Modeless angezeigt wird.

     

    Aber trotzdem Danke für den Versuch ;D

     

     

    Nebenbei...

     

    Habe jetzt das ganze mal ein bisschen aufgedröselt.

    Es verhält sich tatsächlich so, dass vor Aufruf der 2. Userform nur die HUF aktiv ist,

    jedoch wird sie mir als gebunden angezeigt, obwohl ich sie ungebunden aufgerufen habe.

     

    Somit muss sich also während der Laufzeit der Status geändert haben was aber imho. nicht sein kann, da VbModal als Konstante deklariert ist.

     

    Bleibt also nur..

    ..42

     

     

     

    Montag, 27. Dezember 2010 17:05