Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Reihenfolge VBA-Code?

Reihenfolge VBA-Code?
25.11.2016 12:41:12
Joachim
Hallo,
ich will zuerst ein Bild einblenden und dann eine Msgbox anzeigen lassen.
Sheets("Tabelle1").Shapes("Picture 49").Visible = True
MsgBox "Hallo"
Excel dreht das Ganze aber um. Zuerst erscheint die Msgbox, nach deren OK erscheint das Bild.
Warum dreht Excel die Reihenfolge und wie kann ich das ändern?
Gruß
Joachim
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Zeitverzögerung einbauen (Wait)? Gruß owT
25.11.2016 12:46:31
Luc:-?
:-?
nützt nix. owT
25.11.2016 12:52:59
Rudi
AW: Reihenfolge VBA-Code?
25.11.2016 12:52:20
Rudi
Hallo,
so geht das:
Public Sub aaa()
Sheets("Tabelle1").Shapes(1).Visible = True
Application.OnTime Now + TimeSerial(0, 0, 0), "bbb", , True
End Sub
Sub bbb()
MsgBox "Hallo"
End Sub

Gruß
Rudi
Anzeige
AW: Reihenfolge VBA-Code?
25.11.2016 12:56:18
Joachim
Hallo Rudi,
ja so geht's. Aber dass man dazu noch ein Extra-Sub braucht....
Joachim
AW: Reihenfolge VBA-Code?
25.11.2016 12:58:09
Rudi
Hallo,
anscheinend hat die Änderung der Visible-Eigenschaft erst Wirkung, wenn die Prozedur beendet ist.
Gruß
Rudi
Oder so, auch 'ne Verzögerung! ;-) Gruß owT
25.11.2016 12:57:15
Luc:-?
:-?
Anzeige
AW: Oder so, auch 'ne Verzögerung!
25.11.2016 13:02:07
Rudi
Hallo Luc,
das hat nix mit Verzögerung zu tun.
Wenn du aaa mit F8 durchgehst, kommt 'Code kann im Haltemodus nicht ausgeführt werden'.
Es ist wohl so, dass Änderungen der Eigenschaften von Objekten erst mit Beendigung der auslösenden Prozedur wirksam werden.
Gruß
Rudi
Dann bewirkt 'OnTime' eine physische Entkopplung …
25.11.2016 15:46:33
Luc:-?
…des Nachfolgenden vom GesamtVorgang (durch seinen dadurch ggf zeitverzögert erfolgenden Aufruf), Rudi,
wobei mir die von Dir vermutete Ursache noch nicht derart aufgefallen war, nur andere Aktionen wie zB Neuberechnungen und Befehls­Reihen­folge-Aus­wirkungen bei SendKeys. Das mit dem Haltemodus scheint auf eine andere Verarbeitungs­Ebene hinzu­weisen, was mit Befehls­Inter­pretation zur Laufzeit zusammen­hängen könnte.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
;
Anzeige

Infobox / Tutorial

Reihenfolge von VBA-Code in Excel anpassen


Schritt-für-Schritt-Anleitung

Um die Reihenfolge der Ausführung eines VBA-Codes in Excel zu ändern, kannst du die Application.OnTime-Methode verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor (drücke ALT + F11).

  2. Füge ein neues Modul hinzu (Einfügen > Modul).

  3. Kopiere den folgenden Code in das Modul:

    Public Sub aaa()
       Sheets("Tabelle1").Shapes(1).Visible = True
       Application.OnTime Now + TimeSerial(0, 0, 0), "bbb", , True
    End Sub
    
    Sub bbb()
       MsgBox "Hallo"
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aaa aus.

Nun sollte zuerst das Bild angezeigt werden, gefolgt von der MsgBox.


Häufige Fehler und Lösungen

Fehler 1: Die MsgBox wird vor dem Bild angezeigt.

  • Lösung: Stelle sicher, dass du die Application.OnTime-Methode verwendest, um die Ausführung der MsgBox zu verzögern.

Fehler 2: "Code kann im Haltemodus nicht ausgeführt werden."

  • Lösung: Vermeide es, den Code im Haltemodus (F8-Taste) auszuführen. Stattdessen solltest du das Makro normal starten.

Alternative Methoden

Wenn du keine Verzögerung einbauen möchtest, kannst du auch die DoEvents-Funktion verwenden, um Excel zu erlauben, andere Ereignisse zu verarbeiten:

Public Sub aaa()
    Sheets("Tabelle1").Shapes(1).Visible = True
    DoEvents
    MsgBox "Hallo"
End Sub

Diese Methode funktioniert in vielen Fällen, führt aber möglicherweise nicht immer zur gewünschten Reihenfolge.


Praktische Beispiele

Hier sind zwei praktische Beispiele, wie du die Reihenfolge in deinem VBA-Code steuern kannst:

  1. Beispiel mit Bild und MsgBox:

    Public Sub ShowImageAndMessage()
       Sheets("Tabelle1").Shapes("Picture 1").Visible = True
       Application.OnTime Now + TimeSerial(0, 0, 1), "ShowMessage"
    End Sub
    
    Sub ShowMessage()
       MsgBox "Das Bild ist jetzt sichtbar!"
    End Sub
  2. Beispiel mit mehreren Bildern:

    Public Sub ShowMultipleImages()
       Dim i As Integer
       For i = 1 To 3
           Sheets("Tabelle1").Shapes("Picture " & i).Visible = True
           Application.OnTime Now + TimeSerial(0, 0, 1), "ShowMessage"
       Next i
    End Sub

Tipps für Profis

  • Nutze die Application.ScreenUpdating-Eigenschaft, um das Flickern beim Anzeigen von Bildern zu minimieren:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Experimentiere mit unterschiedlichen Zeitintervallen in der OnTime-Methode, um die beste Benutzererfahrung zu erzielen.


FAQ: Häufige Fragen

1. Warum braucht man ein zusätzliches Sub für die MsgBox? Die Änderungen an den Eigenschaften von Objekten werden erst nach Beendigung der auslösenden Prozedur wirksam, daher ist ein separates Sub erforderlich.

2. Was ist die OnTime-Methode? Die OnTime-Methode plant die Ausführung eines bestimmten Makros zu einem späteren Zeitpunkt. Dies ermöglicht die physische Entkopplung von Vorgängen in Excel.

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