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

Makro zeitversetzt starten

Makro zeitversetzt starten
20.01.2021 21:23:09
tobi
Hi Samaritas,
mit folgendem Makro werden in meiner definierten Range1 je Nach Wert der Eingabe
entsprechende WAV.Files aufgerufen und wiedergegeben.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("xy")) Is Nothing Then
If Target.Value >= 0 Then Call Play(Target.Value)
End If
End If
End Sub

Nun hätte ich gerne in meiner zweiten definierten Range, welche genau eine Zeile unter Range1 ist,
und welche nach Eingabe und Enter in Range1 direkt angewählt wird, mit folgendem Code rein durch Anwählen der Range eine zweite WAV.File wiedergegeben.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 7 And Target.Column > 11 Then
Call Play_Wave("C:\Windows\xy.wav", 1)
End If
End Sub

Beide Makros funktionieren soweit, EINZELN.
In Verbindung aber löscht ein Makro das Andere aus, und es wird nur ein Befehl/WAV.File abgespielt.
Wisst Ihr wie ich evtl. die Makro2 zeitversetzt starten lassen kann, damit Makro1 ausgeführt werden kann damit im Anschluss Makro2 startet?
Ich hoffe Ihr wollt einem Bedürftigen helfen.
vielen Dank
Gruß Tobi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zeitversetzt starten
20.01.2021 21:57:38
Daniel
HI
wenn die zweite WAV immer nach der ersten abgespielt werden soll, warum packst du das ganze dann nicht in eine Sub?
wie läuft denn das mit den WAVs?
wird das abspielen der WAV nur angestoßen und dann läuft der Code sofort weiter während die WAV abgespielt wird?
welche WAV ist denn bei dir zu hören, die erste oder die zweite?
wenn die WAV nur angestoßen wird und der Code weiter läuft während die die Melodie spielt dann musst du die Wartezeit selber programmieren.
Dazu gibt's im Prinzip zwei Möglichkeiten:
a) wenn die Stücke kurz sind und während des Abspielens nicht weiter gearbeitet werden soll:
programmiere eine Warteschleife während das erste Stück läuft und starte dann im selben Makro die zweite Wav
b) wenn das erste Stück länger ist und während dem Stück schon weiter gearbeitet werden soll:
schreibe den Aufruf des der zweiten WAV in ein Makro in einem allgemeinen Modul.
Rufe dieses Makro im Change-Eventmakro mit Application.Ontime und dem entsprechenden Zeitversatz auf.
in beiden Fällen musst du aber die Länge des ersten Stückes kennen und selber im Code angeben.
im Fall b) könnte es schwierig werden, die zweite WAV exakt an die erste anzuschließen auch wenn du die Länge exakt kennst, da man die Wartezeit bei Ontime nur im SekundenTakt angeben kann und es eine gewisse unschärfe gibt, je nachdem zu welchem Zeitpunkt der Aufruf stattfindet.
Rufst du zum Zeitunkt x,0001 auf, dauert die Pause eine knappe Sekunde länger als wenn du zum Zeitpunkt x,999 aufrufst.
könntest du ggf mal den Code von Play_Wave posten, damit man selber mal testen kann?
Gruß Daniel
Anzeige
AW: Makro zeitversetzt starten
20.01.2021 22:04:22
Daniel
wenn es jedoch so ist, dass das Makro von alleine wartet bis die WAV abgespielt ist, dann reicht:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("xy")) Is Nothing Then
If Target.Value >= 0 Then
Call Play(Target.Value)
Call Play_Wave("C:\Windows\xy.wav", 1)
End If
End If
End Sub

um die beiden Sounds nacheinander abspielen zu lassen.
Gruß Daniel
AW: Makro zeitversetzt starten
20.01.2021 22:40:57
Daniel
was mir grad so auffällt:
du verwendest zwei unterschiedliche Makros zum abspielen der Dateien:
Play und Play_Wave.
hängt das Problem vielleicht damit zusammen?
wie schon im anderen Beitrag geschrieben, es wäre gut, diese beiden Makros zu kennen.
Gruß Daniel
Anzeige
AW: Makro zeitversetzt starten
20.01.2021 22:42:49
tobi
Hey Daniel,
besten Dank für deine kurzfristiges Engagement.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
If Not Intersect(Target, Range("xy")) Is Nothing Then
If Target.Value >= 0 Then
Call Play(Target.Value)
Call Play_Wave("C:\Windows\xy.wav", 1)
End If
End If
End Sub
Das hatte ich schon versucht. Klappt leider nicht. Hier spielt er nur die zweite File ab.
---
Die Files von Makro1 sind zwar alle nur maximal 10 Sekunden lang, aber es gibt 180 verschiedene Soundfiles, je nachdem welcher Wert eingetragen wird öffnet ein anderes File. Somit lässt sich die Länge nicht bestimmen.
Hier mal der Rest von meinem Code:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" ( _
ByVal lpszSoundName As String, _
ByVal uFlags As Long) As Long
Private Const SND_ASYNC = &H1
Public Sub Play(plngFileNumber As Long)
Call sndPlaySound("C:\Windows\Sound" & CStr(plngFileNumber) & ".WAV", SND_ASYNC)
End Sub

Anzeige
AW: Makro zeitversetzt starten
20.01.2021 22:50:01
tobi
Hier noch die Call Play_Wave Deklaration
Declare Function Play_Wave Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long

AW: Makro zeitversetzt starten
21.01.2021 06:32:32
Tobi
Danke für den Link. Sieht vielversprechend aus. Werde ich heute abend studieren.
AW: Makro zeitversetzt starten
21.01.2021 19:36:58
tobi
Selber Lösungsvorschlag, ausführlich zum nachlesen.
Auch Dir besten Dank!
Gruß
AW: Makro zeitversetzt starten
20.01.2021 23:07:04
Daniel
Hi
ok, mit dem Declare Function-Gedöns kenn ich mich nicht so aus.
als erstes solltest du mal die Frage beantworten, warum du hier zwei verschiedene Varianten einsetzt und nicht beides mal die gleiche?
hast du dich mal damit beschäftigt, was der zweite Parameter bedeutet?
meinen Test nach bedeutet für den 2. Parameter
1: Sound starten und sofort im Code weiter machen
0: Sound Starten und warten, bis Sound fertig ist
dh wenn du als zweiten Paramter 1 verwendest, wird die zweite WAF sofort nach dem Start der ersten abgespielt, dh die zweite ersetzt die erste.
du solltest also, wenn beide Sounds nacheinande gestartet werden, zumindest den ersten Sound über Play_Wave mit zweitem Parameter = 0 ausführen.
bzw für das erste Makro Play ggf die Konstante SND_ASYNC auf 0 setzen.
wenn der erste Sound länger dauert und du währenddessen weiterarbeiten willst, dann so wie von mir im ersten Beitrag beschrieben, den Aufruf für das den zweiten Sound in ein "normales" Makro (allgemeines Modul) packen und über Application.Ontime mit dem entsprechenden Zeitversatz aufrufen.
Dazu brauchst du aber immer die Laufzeit für den jeweiligen Sound, die muss bekannt sein.
Gruß Daniel
Anzeige
AW: Makro zeitversetzt starten
21.01.2021 06:29:59
Tobi
Guten Morgen,
das mit den Parametern war mir nicht bewusst. Das über steigt meine Kenntnisse. Bin leider nur ein Hobby User der mir das zusammen gegoogelt und gebastelt hat. Aber das hört sich schon recht plausibel an, das werde ich heute Abend direkt mal probieren.
Naiv wie ich bin dachte ich es gäbe irgend ein Art "Wartebefehl" der zwischengesetzt werden könnte.
Werde deine Vorschläge heute Abend versuchen umzusetzen und melde mich dann noch einmal.
Besten Dank vorerst...
AW: Makro zeitversetzt starten
21.01.2021 19:28:33
tobi
Den Parameter umgestellt und der gewünschte Effekt ist erreicht! Einfacher gehts kaum.
Daniel, ich danke Dir.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige