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

wav sound einfügen

Forumthread: wav sound einfügen

wav sound einfügen
12.01.2025 22:14:50
Siegfried Pütz
Guten Abend,
in meiner Excel Datei habe ich schon diverse Sound Zuweisungen durch Eure Hilfe durchgeführt. Jetzt möchte ich noch einige hinzufügen.
Bin schon den ganzen Nachmittag am "Rumtricksen", ohne Erfolg. Kurze Erklärung: hierbei handelt es sich um Eintragungen in einer "Dartliste".
Hier möchte ich jetzt z.B.: wenn ein Darter 120 wirft soll dann eine wav Datei (120.wav) abgespielt werden. Dann noch bei 140,160,170,180.
In der Beispieldatei sind schon für Namen Sounds zugewiesen, genau so für "Schnapszahlen", also 111,222, usw.
Die funktionieren alle. Die Codes für die "Wav Dateien" soll den Zellen "D4:D33 und K4:K33 zugeordnet werden!
Aber wie schon beschrieben; mit den anderen Zuweisungen habe ich Probleme :-(
Stelle mal 2 Codes rein, einmal "diese Arbeitsmappe" und "Main".
Wenn jemand helfen kann?
Gruß
SiggiP


  • Option Explicit
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" Then
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("E4").Value = 0 Then
    Call Main(2, Range("D1").Value)
    ElseIf fncSchnapszahl(Range("E4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    If Target.Value = 100 Then Call Main(6)
    If Target.Value = 0 Then Call Main(5)
    If (Target.Value >= 1 And Target.Value = 10) Then Call Main(4)
    If (Target.Value >= 80 And Target.Value 99) Then Call Main(1)
    End If
    ElseIf Not Intersect(Target, Range("K4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("L4").Value = 0 Then
    Call Main(2, Range("K1").Value)
    ElseIf fncSchnapszahl(Range("L4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    If Target.Value = 100 Then Call Main(6)
    If Target.Value = 0 Then Call Main(5)
    If (Target.Value >= 1 And Target.Value = 10) Then Call Main(4)
    If (Target.Value >= 80 And Target.Value 99) Then Call Main(1)
    End If
    End If
    End If
    End If
    End Sub
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Sh.Range("D4").Select
    End Sub



  • Option Explicit
    Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Const SND_ASYNC = &H1
    Private Const SND_NODEFAULT = &H2
    Public Sub Main(ByVal lngTMP As Long, Optional ByVal strName As String)
    Dim objSpeech As Object
    Set objSpeech = CreateObject(Class:="SAPI.SpVoice.1")
    Set objSpeech.Voice = objSpeech.GetVoices.Item(0)
    If lngTMP = 1 Then
    Call objSpeech.Speak("schöne Darts")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("super")
    ElseIf lngTMP = 2 Then
    sndPlaySound 0, SND_ASYNC
    sndPlaySound ThisWorkbook.Path & Application.PathSeparator & strName & ".wav", SND_ASYNC Or SND_NODEFAULT
    ElseIf lngTMP = 3 Then
    sndPlaySound 0, SND_ASYNC
    sndPlaySound ThisWorkbook.Path & Application.PathSeparator & strName & ".wav", SND_ASYNC Or SND_NODEFAULT
    'Call objSpeech.Speak("Pause")
    'Application.Wait Now + TimeValue("00:00:01")
    'Call objSpeech.Speak("einen Schnaps für alle")
    ElseIf lngTMP = 4 Then
    Call objSpeech.Speak("dat war überhaupt nix")
    ElseIf lngTMP = 5 Then
    Call objSpeech.Speak("no score")
    ElseIf lngTMP = 6 Then
    Call objSpeech.Speak("einhundert")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("weiter so")
    End If
    Set objSpeech = Nothing
    End Sub
    Function fncSchnapszahl(ByVal rngCell As Range) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    'objRegEx.Pattern = "^(.)\1+$"
    objRegEx.Pattern = "^(.)\1{2}$"
    fncSchnapszahl = objRegEx.Test(rngCell.Value)
    End Function
  • Anzeige

    38
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: (D)eine Arbeitsmappe müssen wir nachbauen?
    12.01.2025 23:30:45
    Jowe
    Sorry Siegfried,
    dazu fehlt mir die Zeit.
    Gruß
    Jochen
    Kaum...
    13.01.2025 16:02:04
    Case
    Moin, :-)

    ... getestet: ;-)

    In "DieseArbeitsmappe":
    Option Explicit
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" Then
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33", "K4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("E4").Value = 0 Then
    Call Main(2, Range("D1").Value)
    ElseIf fncSchnapszahl(Range("E4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80, Is 99
    Call Main(1)
    End Select
    End If
    End If
    End If
    End If
    End Sub


    In ein Modul:
    Option Explicit
    
    Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Const SND_ASYNC = &H1
    Private Const SND_NODEFAULT = &H2
    Public Sub Main(ByVal lngTMP As Long, Optional ByVal strName As String)
    Dim objSpeech As Object
    Set objSpeech = CreateObject(Class:="SAPI.SpVoice.1")
    Set objSpeech.Voice = objSpeech.GetVoices.Item(0)
    Select Case lngTMP
    Case 1
    Call objSpeech.Speak("schöne Darts")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("super")
    Case 2, 3, 120, 140, 160, 170, 180
    sndPlaySound 0, SND_ASYNC
    sndPlaySound ThisWorkbook.Path & Application.PathSeparator & strName & ".wav", SND_ASYNC Or SND_NODEFAULT
    Case 4
    Call objSpeech.Speak("dat war überhaupt nix")
    Case 5
    Call objSpeech.Speak("no score")
    Case 6
    Call objSpeech.Speak("einhundert")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("weiter so")
    End Select
    Set objSpeech = Nothing
    End Sub
    Function fncSchnapszahl(ByVal rngCell As Range) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    'objRegEx.Pattern = "^(.)\1+$"
    objRegEx.Pattern = "^(.)\1{2}$"
    fncSchnapszahl = objRegEx.Test(rngCell.Value)
    End Function


    Servus
    Case
    Anzeige
    AW: wav sound einfügen
    14.01.2025 14:18:46
    GerdL
    Ohne Test.

    If Intersect(Target, Range("D4:D33,K4:K33,R4:R33")) Is Nothing Or Trim(Target.Value) = "" Then Exit Sub


    Gruß Gerd
    AW: wav sound einfügen
    14.01.2025 14:24:12
    Siegfried Pütz
    Hallo GerdL,
    funktioniert jetzt, Danke. :-)
    Gruß,
    SiggiP
    AW: wav sound einfügen
    14.01.2025 15:23:28
    Oppawinni
    Ach.. das hatte ich auch übersehen.
    Aber Danke Gerd, dass du das für mich korrigiert hast.
    Anzeige
    AW: wav sound einfügen
    14.01.2025 15:47:02
    Siegfried Pütz
    So, an Alle die mir geholfen haben.
    Alle Dateien habe ich, dank Eurer Hilfe, aktualisiert. Funktionieren.
    Vielen Dank.
    Noch einen schönen Tag.
    Grüße Euch,
    SiggiP
    AW: Kaum...
    13.01.2025 17:12:35
    Siegfried Pütz
    Case, vielen Dank.
    Funktioniert.....bis auf: zwischen 10 und 79 soll gar nichts erfolgen. Kommt aber "schöne Darts......super". Das würde nerven, bei unseren "Dartkünsten". :-)
    Ansonsten ist es Super.
    Gruß und Danke,
    SiggiP
    Anzeige
    AW: Kaum...
    13.01.2025 18:00:06
    Siegfried Pütz
    Hallo Case,
    habe gerade festgestellt das bei Eingabe in einer Zelle jedes Mal der "Schnaps Sound" abgespielt wird.
    Unter: Function fncSchnapszahl wurde das Problem in der vorherigen Datei seinerzeit behoben?
    Weiß nicht ob es daran liegt. Da jetzt jedes mal "Schnaps Sound" abgespielt wird kann ich alles andere nicht testen :-(
    Gruß,
    SiggiP

    PS.:bin jetzt für ca. 3 Stunden unterwegs!
    Anzeige
    AW: Kaum...
    13.01.2025 23:55:54
    Oppawinni
    Hi Case,

    hast du nicht vielleicht etwas übersehen, also ich meine das im Arbeitsblatt müsste eher so aussehen
    (hab die Schachtelungstiefe auch etwas reduziert)
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    

    Dim strCell As String

    If Sh.Name Like "Rd*" And Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33")) Is Nothing And Trim(Target.Value) > "" Then
    strCell = "D1"
    ElseIf Not Intersect(Target, Range("K4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    strCell = "K1"
    End If
    End If

    If strCell = "" Then Exit Sub

    If Range(strCell).Offset(3, 1).Value = 0 Then
    Call Main(2, Range(strCell).Value)
    ElseIf fncSchnapszahl(Range(strCell).Offset(3, 1)) Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80, Is 100
    Call Main(1)
    End Select
    End If
    End Sub
    Anzeige
    AW: Wobei...
    14.01.2025 00:14:53
    Oppawinni
    .. wenn ich das Richtig verstehe, soll da ja einerseits geprüft werden, inwieweit es einen besonderen Wurf gegeben hat, aber auch, inwieweit danach der aktuelle Punktestand eine Schnapszahl darstellt.
    Wenn der Punktestand aber eine Schnapszahl wäre, dann würde nur die Schnapsrunde bejubelt, selbst dann, wenn das mit einem 180er Wurf erreicht wurde.
    Das fände ich jetzt nicht ganz ideal, aber das war ja nicht die Frage und ich blicke das ja vielleicht auch nicht ganz.
    Anzeige
    AW: Wobei...
    14.01.2025 10:03:30
    Siegfried Pütz
    Guten Morgen Oppawinni und allen Forumsmitgliedern,
    habe deinen Code mal eingegeben in der Arbeitsmappe. Da kommt bei Eingabe jeder Zahl "schöne Darts.....super". :-(
    Bedanke mich trotzdem für Oppawinni´s Beitrag :-)
    Gruß,
    SiggiP
    Eindeutig - ...
    14.01.2025 11:26:30
    Case
    Moin Oppawinni, :-)

    ... da bin ich zu kurz gesprungen. ;-)

    Hatte das mit den einzelnen Zellen nicht mehr auf dem Schirm. ;-)

    Servus
    Case
    Anzeige
    AW: Wobei...
    14.01.2025 10:54:42
    Siegfried Pütz
    Nochmals Guten Morgen,
    ich habe, Dank Eurer Hilfe, das Problem gelöst :-)
    siehe Tabelle.
    Option Explicit
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" Then
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("E4").Value = 0 Then
    Call Main(2, Range("D1").Value)
    ElseIf fncSchnapszahl(Range("E4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80
    Call Main(1)
    End Select
    End If
    End If
    End If
    End If
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("k4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("k4").Value = 0 Then
    Call Main(2, Range("K1").Vallue)
    ElseIf fncSchnapszahl(Range("l4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80
    Call Main(1)
    End Select
    End If
    End If
    End If
    End Sub
    Anzeige
    AW: Wobei...
    14.01.2025 11:11:14
    Oppawinni
    Gut, das ist aber auch etwas anderes...
    da hast du im ersten Block
    "E4";"D1";"E4" und im zweiten "K4";"K1";"L4"
    Bei dem Code von dem ich ausgegangen war, war das meines Wissens gleichartig angeordnet
    "E4";"D1";"E4" und im zweiten "L4";"K1";"L4"
    aber auch da würde ich den Block nicht vollständig wiederholen.
    Anzeige
    AW: Wobei...
    14.01.2025 11:24:06
    Siegfried Pütz
    Hallo Oppawinni,
    da ich von Euch allen hier noch lerne, bin in VBA nicht gerade eine Leuchte, versuche ich die Dinge irgendwie zu verstehen.
    Habe schon einiges, Dank Eurer Hilfe, in verschiedenen Dateien bearbeiten können.
    Auch hier im Forum weiß ich nicht, ob Ihr eine Email erhaltet, wenn zu Diesem Beitrag irgendwelche Antworten erfolgen?
    Wenn "ja" hast Du ja mitbekommen das Case auch geantwortet hat.
    Noch ne Frage hier zum Forum: ist es normal das ich mich immer einloggen muss, wenn ich auf einen Beitrag antworten möchte?

    Gruß,
    SiggiP
    Anzeige
    Das könnte...
    14.01.2025 11:23:03
    Case
    Moin Siggi, :-)

    ... man noch zusammenfassen. Aber - wenn du glücklich bist, bin ich es auch. ;-)

    Habe jetzt auch meinen Fehler gesehen (es geht ja um D1 bzw. K1 und E4 bzw. L4). Da bin ich zu kurz gesprungen. ;-)

    Schau mir deine Datei noch an. Bedeutet das, dass es dann auch 4 Spieler in der Eingabe sind bzw. werden können? Bin kein Darter - komme eher vom Snooker (ist ja gerade wieder am Laufen).

    Servus
    Case
    Anzeige
    AW: Das könnte...
    14.01.2025 11:39:14
    Siegfried Pütz
    Moin Case,
    die Listen sind im Prinzip identisch, also was die "D"-"E" "K" und "L" Zellen betrifft, In der 3er Liste kommen noch "R" und "S" bzw. in der 4er Liste "Y" und "Z" hinzu.
    Ich denke mal, dass ich den Main Eintrag nur einfügen muss, die aus Deinem Beispiel?
    Bin ja schon froh das es in der 2er Liste funktioniert :-)
    Werde gleich mal mit der 3er Liste probieren....wenn du keinen einfacheren Weg weißt?

    Danke.
    Gruß,
    SiggiP
    Anzeige
    Könntest du...
    14.01.2025 10:58:35
    Case
    Moin Siggi, :-)

    ... uns eine Beispieldatei zur Verfügung stellen. Die alten Dateien habe ich schon alle gelöscht. Und es könnte sich ja auch sonst etwas verändert haben? Am "offenen Herzen" operiert es sich gleich viel leichter. ;-)

    Du kannst ja alle Module, die nichts damit zu tun haben, löschen und nur das Wesentliche drin lassen. ;-)

    Servus
    Case
    Anzeige
    AW: Könntest du...
    14.01.2025 11:11:01
    Siegfried Pütz
    Guten Morgen Case,
    hierin ist kein großes Geheimnis verborgen :-)
    das mit den Sounds denke ich, wird wohl nicht funktionieren. Weiß auch nicht ob ich die hier hochladen kann?
    Ich werde wohl noch einige Tabellenblätter entfernen, ist schon viel Aufwand mit den einzelnen Runden jeden Wurf einzutragen. Mal schauen?
    Da ich ja noch 3er und 4er Listen bearbeiten werde, um das Gleiche von der 2er Liste zu erreichen, muss ich noch etwas Zeit investieren :-(
    Danke Euch,
    Gruß,
    Siggi



    https://www.herber.de/bbs/user/174856.xlsm
    Anzeige
    AW: Könntest du...
    14.01.2025 11:39:31
    schauan
    Hallöchen,

    1) erstelle eine zip mit den Sounds und lade diese hoch
    2) Du hast Blattschutz drin - eventuell solltest Du den raus nehmen.
    3) reduziere Deine Module. Du kannst z.B. ,it einem Makro alles abdecken...

    Die Schaltflächen kannst Du ja nur betätigen, wenn Du auch auf dem entsprechenden Blatt bist. Daher kann man unter Verwendung des Blattnamens das Ganze vereinfachen:

    Hier mal ein Code, wenn Du anhand der Blattnummer was unterschiedliches tun willst, aber bei Rd. und zugehöriger Runde das gleiche. Dazu wird die Blattnummer extrahiert..

    Sub test_1()
    
    Select Case Replace(Replace(ActiveSheet.Name, "Runde", ""), "Rd. ", "")
    Case "1"
    MsgBox 1
    Case "2"
    MsgBox 2
    End Select
    End Sub


    Hier mal ein Code für Deinen Blattwechsel von Runde zu Rd. oder umgekehrt. Der wirkt dann unabhängig von der Anzahl der Blätter. Du musst nur bei der Namensvergabe auf eventuelle Eingabefehler wie z.B. zusätzliche Leerzeichen achten, beim vorigen Code natürlich auch ...

    Sub test_2()
    
    If InStr(1, ActiveSheet.Name, "Runde") > 0 Then
    Sheets("Rd. " & Replace(ActiveSheet.Name, "Runde", "")).Activate
    ElseIf InStr(1, ActiveSheet.Name, "Rd.") > 0 Then
    Sheets("Runde" & Replace(ActiveSheet.Name, "Rd. ", "")).Activate
    End If
    End Sub



    Anzeige
    AW: Könntest du...
    14.01.2025 12:08:36
    Siegfried Pütz
    Hallo schauan, hallo Case,
    ich habe Eure Beiträge angeschaut. Zu schauan, habe die Sounds als Zip versucht hochzuladen (52MB), funktioniert nicht, zu groß. Ich weiß nicht, ob Du die Beispieldatei angeschaut hast? In Rd.1 sind etwas unten 2 Button, einmal Blattschutz aufheben und Blattschutz aktivieren.
    Bin schon etwas in den Jahren, habe noch etwas im Hinterkopf das ich vor etwa 30 Jahren in Erinnerung habe, das man einen Link erstellen konnte, das jemand die Datei runter laden konnte :-)
    Sorry für konnte, konnte usw. :-)

    An Case:
    werde gleich mal deinen Code versuchen, habe ja genug Sicherungen der Dateien .-)
    Melde mich, ob es funktioniert oder nicht.

    Danke Euch allen für Eure Beiträge,

    Gruß
    SiggiP
    Anzeige
    AW: Könntest du...
    14.01.2025 12:14:50
    schauan
    Hallo Sigi,

    1) den Link kannst Du hier einfach einfügen.
    2) alles klar ;-)
    3)
    4) Die Makros zum Leeren, die mit den Bildern auf RD. xx zugewiesen sind, gibt es nicht in der Datei.
    AW: Könntest du...
    14.01.2025 13:17:11
    Siegfried Pütz
    Hallo schauan,
    mit dem Link zu der Zip Datei bekomme ich nicht hin......bin zu alt für....ect. Habe schon einige Hirnzellen diesbezüglich verloren.
    Habe zwar gegoogelt, ohne entsprechendes Resultat.

    Sorry, oder hast Du ne Idee????
    Gruß
    SiggiP

  • C:\Users\Siegfried Puetz\Documents\Darten\1_Neu - Mit Sound\Sounds\Fortuna.zip


  • Anzeige
    AW: Könntest du...
    14.01.2025 14:26:06
    schauan
    Hi Siggi,

    na, ohne Zugriff auf Deinen Rechner wird das nix. Du musst die Datei irgendwo hochladen, z.B. Dropbox, Onedrive, Box (Dell) oder irgendeinen vertrauenswürdigen Filehoster wie wetransfer.com. Dann nimmst Du den Link von dort und postest ihn.
    AW: Könntest du...
    14.01.2025 14:28:20
    Siegfried Pütz
    Hallo schauan,
    werde es gleich nochmal versuchen.
    Danke
    Gruß
    SiggiP
    Anzeige
    Zusammefassen...
    14.01.2025 11:44:08
    Case
    Moin Siggi, :-)

    ... kannst du es so: ;-)
    Option Explicit
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" Then
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33", "K4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    If Cells(4, Target.Column + 1).Value = 0 Then
    Call Main(2, Cells(1, Target.Column).Value)
    ElseIf fncSchnapszahl(Cells(4, Target.Column + 1)) = True Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80
    Call Main(1)
    End Select
    End If
    End If
    End If
    End If
    End Sub


    Wenn dann weitere Spieler hinzukommen, musst du nur diese Zeile im Code anpassen: ;-)
    If Not Intersect(Target, Range("D4:D33", "K4:K33")) Is Nothing And Trim(Target.Value) > "" Then

    Einfach einen Range dazu (z. B. "D4:D33", "K4:K33", "R4:R33"). ;-)

    Habe es jetzt aber wieder nicht intensiv getestet.

    Servus
    Case
    Anzeige
    AW: Blöd
    14.01.2025 12:35:50
    Oppawinni
    .. mein Code hätte wohl auch funktioniert, hätte ich mich nicht ausgerechnet auf verbundene Zellen bezogen.
    (Der Verbund scheint mir dazu noch völlig unnötig)

    Aber klar, das ist - wie erwartet - gleichmäßig aufgebaut, von daher macht es Sinn, das zusammenzufassen.
    AW: Blöd
    14.01.2025 13:06:20
    Oppawinni
    Ich würde dann vorschlagen:
    
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" And Target.CountLarge = 1 Then
    If Intersect(Target, Range("D4:D33", "K4:K33")) Is Nothing Or Trim(Target.Value) = "" Then Exit Sub
    Else
    Exit Sub
    End If
    If Cells(4, Target.Column + 1).Value = 0 Then
    Call Main(2, Cells(1, Target.Column).Value)
    ElseIf fncSchnapszahl(Cells(4, Target.Column + 1)) = True Then
    Call Main(3, "Schnapszahl")
    Else
    Select Case Target.Value
    Case 100
    Call Main(6)
    Case 0
    Call Main(5)
    Case 120, 140, 160, 170, 180
    Call Main(Target.Value, Target.Value)
    Case Is = 10
    Call Main(4)
    Case Is >= 80
    Call Main(1)
    End Select
    End If
    End Sub
    Anzeige
    AW: Blöd
    14.01.2025 13:30:11
    Siegfried Pütz
    Hallo Oppawinni,
    Dein verkürzter Code funktioniert. Danke.
    Möchte mich aber auch bei allen Anderen bedanken, die hier Antworten und Lösungen gepostet haben.
    Vielen, vielen Dank.
    Wenn ich das jetzt noch bei den 3er und 4er Listen hinbekomme, ???? :-)
    AW: Wobei...
    14.01.2025 13:33:21
    Oppawinni
    Das ja auch nicht passt, weil..
    .. wenn nach einer Schnapszahl eine 0 geworfen wird, käme ja wieder "Schnapszahl"
    d.h. es müsste ja mindestens

    ElseIf target.value >0 and fncSchnapszahl(Cells(4, Target.Column + 1)) Then
    


    lauten, aber wie gesagt... das war ja nicht das Thema.
    Anzeige
    AW: Wobei...
    14.01.2025 14:01:16
    Siegfried Pütz
    Hallöchen,
    bei der 2er Liste funktioniert es ohne Probleme. Wenn ich aber
    If Intersect(Target, Range("D4:D33", "K4:K33", "R4:R33")) Is Nothing Or Trim(Target.Value) = "" Then Exit Sub

    einfüge kommt folgende Meldung:
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    in Gelb und in dem oberen Code wird Range blau hinterlegt?


    Userbild
    Anzeige
    Habe nur eine...
    13.01.2025 19:43:31
    Case
    Moin, :-)

    ... leere Datei genommen - Tabellenblattname angepasst. Eine "WAV-Datei" ein paar mal kopiert und nur sporadisch getestet. Klappt bei mir.

    Das mit der Schnapszahl kann ich gerade nicht nachstellen.

    Was damals das Problem war, dürfte damit nichts zu tun haben. Du wolltest, dass es nicht bei 2stelligen Zahlen passiert, sondern nur bei dreistelligen Schnapszahlen.
    Dafür hatte ich das Pattern geändert ("^(.)\1{2}$").

    Mehr kann ich im Moment nicht sagen. ;-)

    Servus
    Case
    Anzeige
    Dann schreibe...
    13.01.2025 17:43:00
    Case
    Moin, :-)

    ... statt...
    Case Is >= 80, Is  99

    ... so: ;-)
    Case Is >= 80

    Servus
    Case
    AW: (D)eine Arbeitsmappe müssen wir nachbauen?
    13.01.2025 14:51:24
    schauan
    Hallöchen,

    "Aber wie schon beschrieben; mit den anderen Zuweisungen habe ich Probleme :-("

    welche denn?
    Anzeige
    AW: (D)eine Arbeitsmappe müssen wir nachbauen?
    13.01.2025 14:53:37
    schauan
    ... eventuell solltest Du auch mal
    --> die Code-Tags benutzen, damit das besser lesbar ist - u.a. in der Hoffnung, dass Dein originaler Code Einrückungen kennt ...
    --> Deine If's mal mit logischen Operatoren etwas zusammenfassen ...
    AW: (D)eine Arbeitsmappe müssen wir nachbauen?
    13.01.2025 15:11:07
    Siegfried Pütz
    Hallo schauan,
    unten aufgeführt die Arbeitsmappe und das dazu gehörige Main.
    Bin kein Profi in solchen Dingen. Habe versucht anstatt der "ElseIf fncSchnapszahl", ---- ElseIf fncEinhundert" einzubinden. Eine entsprechende Sounddatei befindet sich im gleichen Ordner wie für "Schnapszahl". Die Funktion habe ich auch geändert, ohne Erfolg.
    Wie beschrieben, bin Laie....
    Gruß,
    SiggiP


           Option Explicit
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name Like "Rd*" Then
    If Target.CountLarge = 1 Then
    If Not Intersect(Target, Range("D4:D33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("E4").Value = 0 Then
    Call Main(2, Range("D1").Value)
    ElseIf fncSchnapszahl(Range("E4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    If Target.Value = 100 Then Call Main(6)
    If Target.Value = 0 Then Call Main(5)
    If (Target.Value >= 1 And Target.Value = 10) Then Call Main(4)
    If (Target.Value >= 80 And Target.Value = 99) Then Call Main(1)
    End If
    ElseIf Not Intersect(Target, Range("K4:K33")) Is Nothing And Trim(Target.Value) > "" Then
    If Range("L4").Value = 0 Then
    Call Main(2, Range("K1").Value)
    ElseIf fncSchnapszahl(Range("L4")) = True Then
    Call Main(3, "Schnapszahl")
    Else
    If Target.Value = 100 Then Call Main(6)
    If Target.Value = 0 Then Call Main(5)
    If (Target.Value >= 1 And Target.Value = 10) Then Call Main(4)
    If (Target.Value >= 80 And Target.Value = 99) Then Call Main(1)
    End If
    End If
    End If
    End If
    End Sub
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Sh.Range("D4").Select
    End Sub


    -------------------------------------------------------------------------------------------------------------------------------------------------------
    Option Explicit
    
    Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Const SND_ASYNC = &H1
    Private Const SND_NODEFAULT = &H2
    Public Sub Main(ByVal lngTMP As Long, Optional ByVal strName As String)
    Dim objSpeech As Object
    Set objSpeech = CreateObject(Class:="SAPI.SpVoice.1")
    Set objSpeech.Voice = objSpeech.GetVoices.Item(0)
    If lngTMP = 1 Then
    Call objSpeech.Speak("schöne Darts")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("super")
    ElseIf lngTMP = 2 Then
    sndPlaySound 0, SND_ASYNC
    sndPlaySound ThisWorkbook.Path & Application.PathSeparator & strName & ".wav", SND_ASYNC Or SND_NODEFAULT
    ElseIf lngTMP = 3 Then
    sndPlaySound 0, SND_ASYNC
    sndPlaySound ThisWorkbook.Path & Application.PathSeparator & strName & ".wav", SND_ASYNC Or SND_NODEFAULT
    'Call objSpeech.Speak("Pause")
    'Application.Wait Now + TimeValue("00:00:01")
    'Call objSpeech.Speak("einen Schnaps für alle")
    ElseIf lngTMP = 4 Then
    Call objSpeech.Speak("dat war überhaupt nix")
    ElseIf lngTMP = 5 Then
    Call objSpeech.Speak("no score")
    ElseIf lngTMP = 6 Then
    Call objSpeech.Speak("einhundert")
    Application.Wait Now + TimeValue("00:00:01")
    Call objSpeech.Speak("weiter so")
    End If
    Set objSpeech = Nothing
    End Sub
    Function fncSchnapszahl(ByVal rngCell As Range) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBScript.RegExp")
    'objRegEx.Pattern = "^(.)\1+$"
    objRegEx.Pattern = "^(.)\1{2}$"
    fncSchnapszahl = objRegEx.Test(rngCell.Value)
    End Function
    Anzeige
    Anzeige
    Anzeige
    Live-Forum - Die aktuellen Beiträge
    Datum
    Titel
    14.05.2026 13:31:09
    14.05.2026 09:50:42
    13.05.2026 19:14:18