3x Tonansage wenn Zelle Wert - Zelle Text

Bild

Betrifft: 3x Tonansage wenn Zelle Wert - Zelle Text
von: Norbert
Geschrieben am: 18.04.2005 14:32:13
Hallo Forumsmitglieder!
Vor über zwei Jahren zuletzt hier im Forum gewesen, stellen sich mir nun wieder Fragen zur Sprachausgabe die ich nicht lösen kann. Und zwar sollen WAV-Dateien abgespielt werden, wenn sich Werte oder Text in zellen ändern.
Ich habe mir schon die VBA-Makros für WAV-Ausagben hier im Forum angeschaut, aber bei mir tun sie nichts bzw. ich bringe sie nicht zum laufen.
Wahrscheinlich weil nicht erfüllbar:
1.) Gib meine Sprach.wav aus, wenn sich in Zelle AD849 der Text zur vorigen Zelle ändert.
2.) Gib eine andere Sprach.wav aus, wenn sich im zuletzt gefüllten (davor ist der Bereich ein paar Zellen lang leer) Zellbereich Mxx:M849 eine Zahl von blassgrau in rot umwandelt (habe ich mit bedingter Formatierung gemacht)und diese Zahl die höchste im Bereich ist.
3.) Gib eine andere Sprach.wav aus, wenn sich im zuletzt gefüllten (davor ist der Bereich ein paar Zellen lang leer) Zellbereich Pxx:P849 eine Zahl von blassgrau in rot umwandelt (habe ich mit bedingter Formatierung gemacht)und diese "rote" Zahl die tiefste im Bereich ist.
Wenn das mit der "roten Zahl" nicht lösbar ist, dann zumindest der Höchstwert im Bereich sollte gemeldet werden, auserdem muß ja noch ermittelt werden ab wann von der zuletzt leeren Zelle der Bereich mit Werten gefüllt ist.
Na ja, dann wären noch zwei "Töne" schön wenn es sie gäbe und zwar - starte eine "Sirene" wenn die Zahl in der letzten Zelle D849 den letzten "roten" Höchstwert im Bereich Mxx:M849 übersteigt. Starte eine "Sirene" wenn die Zahl in der anderen letzten Zelle E849 den letzten "roten" Tiefstwert im Bereich Pxx:P849 unterschreitet.
Von den Abfragen her, hört sich das relativ simpel an. Eigentlich nur Wenn > Dann mache das. Mir bereitet es aber Probleme, erstens überhaupt mal eine Tonausgabe zustande zu bringen und zweitens noch schwieriger ist, wie kann ich Excel veranlassen, immer ab der letzten vorhergehenden leeren Zelle sich automatisch den "roten" Höchstwert bzw. in der naderen Spalte den letzten "roten" Tiefstwert zu merken. Wenn die Zellen wieder leer werden, soll Excel "die gemerkte Zahl" wieder löschen und die Prozedur beim nächsten mal wieder von neuem beginnen. Mit MaxMin ist es ja einfach, aber Excel soll automatisch erkennen, dass da vorher leere Zellen waren und danach wenn wieder leere Zellen kommen beim nächsten mal wieder neu zu rechnen.
Das Sheet besteht aus 849 Zeilen, wobei nach jeder Stunde die erste Zeile gelöscht (die anderen 848 Zeilen rücken ja dann automatisch nach) und danach in der 849.ten Zeile die Werte sich wieder neu berechnen.
Hoffentlich klappt es mein Bild hochzuladen, es sollte hier zu sehen sein:
Userbild

Bild

Betrifft: ein Ansatz...
von: UweD
Geschrieben am: 18.04.2005 16:12:14
Hallo

das Hauptproblem, das abspielen der Wav klappt so...
in ein Modul kommt Folgendes:


      
Declare Function sndPlaySound32 Lib "winmm.dll" _
    
Alias "sndPlaySoundA" (ByVal lpszSoundName _
    
As StringByVal uFlags As LongAs Long
Sub Wave1()
    
Call sndPlaySound32("c:\windows\media\chord.wav", 1)
End Sub
Sub Wave2()
    
Call sndPlaySound32("c:\windows\media\ringin.wav", 1)
End Sub
Sub Wave3()
    
Call sndPlaySound32("c:\windows\media\tada.wav", 1)
End Sub 



- - - -
Zum Aufruf wird das Change-Ereignis verwendet:
also in den Codebereich von Tabelle1 kommt das hier:


      
Private Sub Worksheet_Change(ByVal Target As Range)
    
If Range("AD849").Value <> Range("AD848").Value Then
        
Call Wave1
    
End If
'    if Range...usw 'deine weiteren Prüfungen
'        Call Wave2
'    End If
End Sub 




Die einzelnen Wenn... dann kannst du ähnlich aufbauen..

Gruß Uwe
Bild

Betrifft: AW: ein Ansatz...
von: Norbert
Geschrieben am: 18.04.2005 18:25:38
Danke Uwe!
~f~
Ich hatte gerade eine Function probiert (hier im Forum gefunden von Andreas aus 22.03.04) und sie funktioniert sogar, bis auf den Aufruf der wav-Datei. Es wurde immer nur der Gong gespielt. Aufgrund Deiner Aufstellung sehe ich, dass bei + "\Test.wav", 1) der Fehler lag, das gehört in Klammern gesetzt und jetzt kommt "tada". Nun probiere ich Dein Makro aus, welches Du mir sehr sauber aufstellen konntest.
Kannst Du mir eventuell noch sagen, was weniger störungsanfällig abläuft: Dein komplettes VBA-Makro oder der "Zwitter" Formelabfrage in Zelle mit Makro unten:
Declare

Function sndPlaySound32 Lib "winmm.dll" _
    Alias "sndPlaySoundA" (ByVal lpszSoundName _
    As String, ByVal uFlags As Long) As Long
Public 

Function MakroSound() As String
    Call sndPlaySound32(ThisWorkbook.Path + "\Test.wav", 1)
    MakroSound = ""
End Function

In Zelle "B1" dann diese Formel: =WENN(A1<8;MakroSound();"")
~f~
Bild

Betrifft: AW: ein Ansatz...
von: Norbert
Geschrieben am: 18.04.2005 22:31:41
Hallo Uwe, meine Frage, was weniger störungsanfällig abläuft, dein komplettes VBA-Makro oder der "Zwitter" von Formelabfrage in Zelle und Makro kann ich mir bereits selbst beantworten. Der Aufruf des Makros (Wave-Dateien abspielen) mittels Abfrageformel aus der Zelle heraus ist nicht optimal. Schwankt der Wert ruft die Formel (Anweisung) in der Abfragezelle zu schnell das Makro hintereinander auf und ich komme währenddessen in das Sheet nicht hinein und muß warten "bis es sich beruhigt" (bis die 5 Sekunden lange wave-Datei abgespielt ist).
Morgen versuche ich es mit Deinem Ansatz, der sich mir ohnehin plausibler darstellt. Super ist darin, dass man gleich aus einem Makro heraus alle Wav-Dateien steuern kann.
Ich melde mich wieder wenn's klappt.
Gruß, Norbert
Bild

Betrifft: AW: 3x Tonansage wenn Zelle Wert - Zelle Text
von: Norbert
Geschrieben am: 21.04.2005 22:41:34
Hallo Uwe, Dein Code funktioniert!
Ein Problem hätte ich noch dazu:
Wenn sich in Zelle O849 der Text gegenüber O848 ändert wird wohl die Wav Datei beim ersten mal abgespielt, aber nur einmal. Ändert sich Zelle O849 (oder auch AJ849) auf den gleichen Text wie in O848 (bzw. AJ848) zurück und wird dann der Text neuerlich unterschiedlich zur vorherigen Zelle, dann wird die Wav Datei nicht mehr gespielt. Ich brauche aber das aber jedes mal wenn sich der Text wieder zur vorherigen Zelle O848 ändert.
Gibt es da noch was im Code zu ändern?
Meine Codes sehen jetzt so aus:
Tabelle7(Blatt1):
Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Sub signalwechsel()
Call sndPlaySound32("D:\Eigene Dateien\Daten\Sound\signalwechsel.wav", 1)
End Sub</pre>
Sub stopkurs()
Call sndPlaySound32("D:\Eigene Dateien\Daten\Sound\stopkurs.wav", 1)
End Sub</pre>
Modul:
<pre>
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("O849").Value <> Range("O848").Value Then
Call signalwechsel
End If
If Range("AJ849").Value <> Range("AJ848").Value Then
Call stopkurs
End If
End Sub</pre>
Bild

Betrifft: AW: 3x Tonansage wenn Zelle Wert - Zelle Text
von: UweD
Geschrieben am: 22.04.2005 08:15:31
Hallo

die Codes müssen getauscht werden:

In ein Modul gehört das hier:


      
Declare Function sndPlaySound32 Lib "winmm.dll" _
    
Alias "sndPlaySoundA" (ByVal lpszSoundName _
    
As StringByVal uFlags As LongAs Long
Sub signalwechsel()
    
Call sndPlaySound32("D:\Eigene Dateien\Daten\Sound\signalwechsel.wav", 1)
End Sub
Sub stopkurs()
    
Call sndPlaySound32("D:\Eigene Dateien\Daten\Sound\stopkurs.wav", 1)
End Sub 


In das Tabellenblatt das


      
Private Sub Worksheet_Change(ByVal Target As Range)
    
If Range("O849").Value <> Range("O848").Value Then
        
Call signalwechsel
    
End If
    
If Range("AJ849").Value <> Range("AJ848").Value Then
        
Call stopkurs
    
End If
End Sub 


Dann müsste es klappen
Gruß UweD
Bild

Betrifft: AW: 3x Tonansage wenn Zelle Wert - Zelle Text
von: Norbert
Geschrieben am: 22.04.2005 14:08:15
Danke Uwe - genauso habe ich die Codes ja aufgezeichnet - ich hatte Dir bei meinen Angaben "Tabelle mit Modul" verwechselt.
Zumindest werden die Audio-Meldungen, wenn sich die betreffenden Zellen von selbst automatisch ändern, angesagt.
Ich habe eine "Reglerleiste" mittels der ich per Hand die Werte (Kurse) ändern kann, bis in Zelle AJ849 oder O849 aufgrund anderer Abfragen der Text aufscheint. Fahre ich den Regler zurück dann verschwindet der Text wieder. Erhöhe ich mit dem Regler wieder die Werte wird neuerlich der Text angezeigt, aber dann kommt kein zweites mal ein Ton zustande. Der Text (auf den sich das Ton-Makro bezieht) verschwindet also und wird neu angezeigt u.s.w. Der Ton wird nur dann weiter ausgegeben, wenn ich den Wert mittels Regler zurückfaher und dann noch weiter erhöhe als er vorher bei der ersten Tonansage stand.
Nun ist möglich, dass ohne dem Regler bei Änderung der Zahlenwerte (Kurse werden per DDE aus Teletext eingelesen) und wenn der entsprechende Text angezeigt wird (oder auch wieder verschwindet), die Tonansage sowieso wie gewünscht mehrmals ausgegeben wird und vielleicht nur bei der Handregelung (mit dem Regler, wo ich nur die Cursortasten rauf und runter ziehen brauche um Werte zu ändern) die Tonansage nur einmal aufgerufen wird (bzw. ein zweites mal wenn ich noch höher regle).
Ich lasse das Ganze jetzt mal laufen und warte ab, bis sich der Text in Zelle O849 oder AJ849 automatisch ändert. Vielleicht funktioniert es ohnehin so wie gewünscht.
lg norbert
Bild

Betrifft: AW: 3x Tonansage wenn Zelle Wert - Zelle Text
von: Norbert
Geschrieben am: 27.04.2005 13:25:55
Hallo Uwe, bitte hilf mir wieder ...
Nun habe ich eine extra kleine neue Tabelle (mit Blattname Tonansage) aufgemacht. Das hat lediglich 3 Zeilen, wo ich in der linken Zelle Zeile 2 aus einer anderen Tabelle den Kurs auslesen lasse. In der rechten danebenstehenden Zelle schreibe ich mir per Hand einen Kurs hinein. Dann soll das Makro später einfach die WAV aufrufen, wenn in der linken Zelle der Kurs entweder über bzw. im zweiten Teil in Zeile3 der Wert unter der rechten Zelle liegt und als zweite Vorgabe "AND" jeweils der vorgegebene Text übereinstimmt.
Das Makro arbeitet - aber nur dann(!!!), wenn ich in irgendeiner Zelle der Tabelle Tonansage(Blatt:Audiostopp) was reinschreibe und mit Enter abschließe - von selbst wird kein Ton ausgegeben!???! Ich versteh die Welt nicht ...
So schaut mein Makro aus - was habe ich denn da wieder falsch geschrieben oder ausgelassen?
MODUL
Declare Function sndPlaySound32 Lib "winmm.dll" _
Alias "sndPlaySoundA" (ByVal lpszSoundName _
As String, ByVal uFlags As Long) As Long
Sub stopkurs()
Call sndPlaySound32("D:\Eigene Dateien\Sound\stopkurs.wav", 1)
End Sub

TABELLE1(Stopansage)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("D2").Value > Range("E2").Value And Range("C2").Value = "Sell" Then
            Call stopkurs
    End If
    If Range("D3").Value < Range("E3").Value And Range("C3").Value = "Buy" Then
            Call stopkurs
    End If
End Sub

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Problem mit "set""