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

Vier Shapes - Ovale zeitverzögert aus und einblenden

Vier Shapes - Ovale zeitverzögert aus und einblenden
01.12.2023 15:08:00
Dieter(Drummer)
Guten Tag an alle ...

in Beispieldatei soll bei Klick auf Button "Wechsel", jeweils das Shape "Oval 1 bis Oval 4" hintereinander aus- und eingeblendet werden. Das funktioniert, aber leider nur mit Fehler.
Es werden die ersten 1-2 oder auch 3 Ovale NICHT einzeln aktiviert. Ich kann keinen Fehler in meinem Code erkennen.

Es sollen alle 4 Ovale einzeln, zeitverzögert, hintereinander sichtbar aus- und einblendet werden.

Mit der Bitte um Hilfe,

grüßt, Dieter(Drummer)
Beispieldatei: https://www.herber.de/bbs/user/164688.xlsm

Modul1
'Mx: Für Ton Beep und Sleep
Private Declare Sub Beep Lib "kernel32.dll" ( _
Optional ByVal dwFreq As Long = 440, _
Optional ByVal dwDuration As Long = 240) 'Tonlänge 240, kann auch andere Zahl für Tondauer haben

Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

Sub AusAn_Wechsel()
ActiveSheet.Shapes("Oval 1").Visible = False
DoEvents
Sleep 500
Beep 888, 100

ActiveSheet.Shapes("Oval 2").Visible = False
DoEvents
Sleep 500
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = False
DoEvents
Sleep 500
Beep 688, 100

ActiveSheet.Shapes("Oval 4").Visible = False
DoEvents
Sleep 500
Beep 588, 100

'Wechsel False auf True
ActiveSheet.Shapes("Oval 1").Visible = True
DoEvents
Sleep 500
Beep 688, 100

ActiveSheet.Shapes("Oval 2").Visible = True
DoEvents
Sleep 500
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = True
DoEvents
Sleep 500
Beep 888, 100

ActiveSheet.Shapes("Oval 4").Visible = True
DoEvents
Sleep 500
'Beep 988, 100
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vier Shapes - Ovale zeitverzögert aus und einblenden
01.12.2023 15:23:47
daniel
Hi
ersetze mal das
SLEEP 500
durch

T = Timer + 0.5

Do Until Timer > T: Loop


damit funktioniert das bei mir, außerdem brauchst du dann nicht den Zugriff auf die API:
Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)

diese sollte man vermeiden, da es von Excel eine 32-bit und eine 64-bit version gibt und dieser Codeteil je nach Version geändert werden muss ("kernel32"; "kernel64")
wenn man darauf verzichtet, bleibt der Code flexibel.

Gruß Daniel
Anzeige
AW: Vier Shapes - Ovale zeitverzögert aus und einblenden
02.12.2023 15:13:36
Peter Trawinski
Hi Dieter,

die Lösung ist, nach jedem Aus- oder Einblenden eines Shapes einen Bildschirmrefresh mit "Application.ScreenUpdating = True" zu machen.
Dann klappt's auch mit den Nachbarn... :--)
Der "DoEvents" muss aber trotzdem sein, um Windows die Zeit/Gelegenheit zu geben, das auch Durchzuführen!

Sub AusAn_Wechsel()


ActiveSheet.Shapes("Oval 1").Visible = False
Application.ScreenUpdating = True
DoEvents
Beep 888, 100
Sleep 500

ActiveSheet.Shapes("Oval 2").Visible = False
Application.ScreenUpdating = True
DoEvents
Beep 788, 100
Sleep 500

ActiveSheet.Shapes("Oval 3").Visible = False
Application.ScreenUpdating = True
DoEvents
Beep 688, 100
Sleep 500

ActiveSheet.Shapes("Oval 4").Visible = False
Application.ScreenUpdating = True
DoEvents
Beep 588, 100
Sleep 500

'Wechsel False auf True
ActiveSheet.Shapes("Oval 1").Visible = True
Application.ScreenUpdating = True
DoEvents
Beep 688, 100
Sleep 500

ActiveSheet.Shapes("Oval 2").Visible = True
Application.ScreenUpdating = True
DoEvents
Beep 788, 100
Sleep 500

ActiveSheet.Shapes("Oval 3").Visible = True
Application.ScreenUpdating = True
DoEvents
Beep 888, 100
Sleep 500

ActiveSheet.Shapes("Oval 4").Visible = True
Application.ScreenUpdating = True
DoEvents
Beep 988, 100
Sleep 500

End Sub
Anzeige
AW: Einfach perfekte Lösung mit Sleep
03.12.2023 09:44:05
Dieter(Drummer)
Guten Morgen Peter,

deine VBA Lösung ist einfach perfekt und klappt wie gewünscht. Danke auch für deine Erläuterungen ...
Danke nochmal und einen schönen 1. Advent.

Gruß, Dieter(Drummer)

AW: Vier Shapes - Ovale zeitverzögert aus und einblenden
01.12.2023 15:35:46
Dieter(Drummer)
Danke Daniel für Rückmeldung und Info.

Nachdem ich deinen Codeteil eingegeben habe,kommt Fehler "ungültige Zeichen".

Kannst du da nochmal helfen?

Gruß, Dieter(Drummer)
Jetziger Code:
'Mx: Für Ton Beep und Sleep
Private Declare Sub Beep Lib "kernel32.dll" ( _
Optional ByVal dwFreq As Long = 440, _
Optional ByVal dwDuration As Long = 240) 'Tonlänge 240, kann auch andere Zahl für Tondauer haben

Sub AusAn_Wechsel()
ActiveSheet.Shapes("Oval 1").Visible = False
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 888, 100

ActiveSheet.Shapes("Oval 2").Visible = False
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = False
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 688, 100

ActiveSheet.Shapes("Oval 4").Visible = False
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 588, 100

'Wechsel False auf True
ActiveSheet.Shapes("Oval 1").Visible = True
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 688, 100

ActiveSheet.Shapes("Oval 2").Visible = True
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = True
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
Beep 888, 100

ActiveSheet.Shapes("Oval 4").Visible = True
DoEvents
T = Timer + 0.5

Do Until Timer > T: Loop
'Beep 988, 100
End Sub

Anzeige
AW: Vier Shapes - Ovale zeitverzögert aus und einblenden
01.12.2023 16:37:23
daniel
keine Ahnung
hast du Copy-Paste gemacht oder gelesen, verstanden, selber programmiert?
AW: Sorry Daniel, aber das versteh ich nicht ...
01.12.2023 17:02:18
Dieter(Drummer)
... den Code habe ich selbst programiert und deinen Hinweis für "Sleep" habe ich mit ersetzen im Code geändert.
Fehlerhinweis1: Fehler beim kompilieren,Variable nicht definiert. Markiert wird: "T =".
Fehlerhinweis2, wenn ich mal "Option Expilcit" abklemme: Fehler beim kompilieren. Markiert wird: "Do Until Timer > T: Loop"

Wäre schön. wenn du da nochmal helfen kannst.

Gruß, Dieter(Drummer)
AW: Sorry Daniel, aber das versteh ich nicht ...
01.12.2023 17:32:21
daniel
Option Explicit drin lassen und T als Double deklarieren.

Dass sollten eigentlich Basics sein, due man nicht jedesmal erklären muss, wenn auf diesem Niveau programmiert wird. Du nutzt API-Funktionen, mit denen ich mich nicht auskenne. Da bist du mir voraus.

Timer ist die interne Uhr von VBA, die die Sekunden ab Mitternacht zählt, und das in einer sehr kleinen Taktung.
Man läßt einfach eine Schleife laufen, bis der Timer um 0,5 Sekunden weiter gelaufen ist.

Gruß Daniel
Anzeige
AW: Nun mein jetziger Code, ncoh nicht ganz fit
01.12.2023 18:03:56
Dieter(Drummer)
Hallo Daniel,

Danke für deine Geduld.

Der jetzige Code läuft, aber die erstem1, 2 ,3 Ovale werden nicht einzeln ausgeblendet. Die 4, die wieder eingeblendet werden, werden problemlos einzeln angezeigt.
Ich kann da keinen Fehler entdecken und ich denke, das ich dir in VBA nicht das Wasser reichen kann.

Evtl. hast di ja nich eine Idee.

Gruß, Dieter(Drummer)
Hier mein jetziger Code mit deiner Hilfe:
Option Explicit

'Mx: Für Ton Beep und Sleep
Private Declare Sub Beep Lib "kernel32.dll" ( _
Optional ByVal dwFreq As Long = 440, _
Optional ByVal dwDuration As Long = 240) 'Tonlänge 240, kann auch andere Zahl für Tondauer haben

'Anpassung von: Herber, Daniel 01.12.2023 17:02:18
Sub AusAn_Wechsel()
Dim T As Double
ActiveSheet.Shapes("Oval 1").Visible = False

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 888, 100
DoEvents

ActiveSheet.Shapes("Oval 2").Visible = False

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 788, 100
DoEvents

ActiveSheet.Shapes("Oval 3").Visible = False

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 688, 100
DoEvents

ActiveSheet.Shapes("Oval 4").Visible = False

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 588, 100
DoEvents

'Wechsel False auf True
ActiveSheet.Shapes("Oval 1").Visible = True

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 688, 100
DoEvents

ActiveSheet.Shapes("Oval 2").Visible = True

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 788, 100
DoEvents

ActiveSheet.Shapes("Oval 3").Visible = True

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 888, 100
DoEvents

ActiveSheet.Shapes("Oval 4").Visible = True

Do Until Timer > T: Loop
T = Timer + 0.5

Beep 988, 100
DoEvents
End Sub
Anzeige
AW: Habe es jetzt mit Application.Wait gemacht, statt Sleep
02.12.2023 11:23:30
Dieter(Drummer)
Hallo Daniel,

habe es jetzt mit "Application.Wait (Now + TimeValue("00:00:01"))" gemacht.Hat wohl den Nachteil, dass es halt 1 Sekunde Wartezeit hat und keine kleinere Zeit genutzt werde kann.
Ich denke das reicht so.

Danke dir nochmal für deine Geduld und Hilfe.

Gruß und einen erfrolgreichen Tag
Dieter(Drummer)

Jetziger Code:
'Mx: Für Ton Beep und Wait
Private Declare Sub Beep Lib "kernel32.dll" ( _

Optional ByVal dwFreq As Long = 440, _
Optional ByVal dwDuration As Long = 240) 'Tonlänge 240, kann auch andere Zahl für Tondauer haben

Sub AusAn_Wechsel()
ActiveSheet.Shapes("Oval 1").Visible = False
Application.Wait (Now + TimeValue("00:00:01"))
Beep 888, 100

ActiveSheet.Shapes("Oval 2").Visible = False
Application.Wait (Now + TimeValue("00:00:01"))
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = False
Application.Wait (Now + TimeValue("00:00:01"))
Beep 688, 100

ActiveSheet.Shapes("Oval 4").Visible = False
Application.Wait (Now + TimeValue("00:00:01"))
Beep 588, 100

'Wechsel False auf True
ActiveSheet.Shapes("Oval 1").Visible = True
Application.Wait (Now + TimeValue("0:00:01"))
Beep 688, 100

ActiveSheet.Shapes("Oval 2").Visible = True
Application.Wait (Now + TimeValue("00:00:01"))
Beep 788, 100

ActiveSheet.Shapes("Oval 3").Visible = True
Application.Wait (Now + TimeValue("00:00:01"))
Beep 888, 100

ActiveSheet.Shapes("Oval 4").Visible = True
Application.Wait (Now + TimeValue("00:00:01"))
Beep 988, 100
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige