124 Aufrufe
Gefragt in Tabellenkalkulation von addeguddi Experte (2.6k Punkte)

Hallo an alle die etwas vom Dartspiel verstehen,

Suche eine Lösung für mein Dartspiel Doppel In:

Diese Liste ist mit Ansage der erzielten Punkte und nach dem 3tem Wurf wird die erzielte Punktzahl angezeigt und angesagt. Nach jedem 3tem Wurf wird ein Spielerwechsel vorgenommen.

Nun zu meinem Problem.

bei dem Spiel Dart Doppel in, ist auch die Zahl 50 ein Doppel (2*25). In der Liste die ein wirklich netter Kollege vom Forum vor Jahren erstellt ist alles OK bis auf das, dass mir der Wurf in Bullseys nicht als Doppel zählt, sondern mir das als no Score angesagt wird. 

Zur Info: Wenn ich mit dem ersten Wurf auf ein Doppel klicke (Doppel ist immer Gerade Zahl, 2,4,6,8,auch die 50 Usw.) wenn ich auf die Zahl 50 beim 1tem klicke, zählt er den Wurf aber gibt  als Ergebnis nichts zurück sondern no score

ein Andere Dartliste ohne Doppel in zählt er die Zahl 50 sofort beim 1em Wurf.

Nun zu meiner Frage: 

was muss in dem VBA verändert werden, dass in Doppel in der 1te Wurf ( Zahl 50 ) als Doppel in gezählt wird.

Lade die Dartliste hoch, damit sich die Person, die  mir helfen möchte, sich das VBA ansehen kann.

Gruß Adde

https://filehorst.de/d/ebFyIqwC

6 Antworten

+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Adde,

ergänze das Makro

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

wir folgt:

'Prüfen ob Zelle verbunden ist
If Target.Cells.Count > 1 Then
   'falls ja dann die entsprechenden Werte in Variable schreiben
    If Target.Address = "$a$15:$b$15" Then lngWurf = 25
    If Target.Address = "$c$15:$d$15" Or Target.Address = "$c$16:$d$16" Then
         lngWurf = 50        '50 Zuweisen
         lngDT = 2           'Marker für Doppel setzen
    End If

Damit sollte es gehen.

Gruß

M.O.

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo M.O. 

Danke für deine Antwort. 

Frage vorab hast du die Liste einmal angeschaut, habe von dem Entwurf von damals sehr viel verändert.

Nun zu deinem Vorschlag:

Habe das was du erstellt hast für das alte ersetzt:

Alter Befehl

'Prüfen ob Zelle verbunden ist
If Target.Cells.Count > 1 Then
   'falls ja dann die entsprechenden Werte in Variable schreiben
    If Target.Address = "$a$15:$b$15" Then lngWurf = 25
    If Target.Address = "$c$15:$d$15"  Then
         lngWurf = 50        '50 Zuweisen
         lngDT = 2           'Marker für Doppel setzen
    End If

Neu von dir

'Prüfen ob Zelle verbunden ist
If Target.Cells.Count > 1 Then
   'falls ja dann die entsprechenden Werte in Variable schreiben
    If Target.Address = "$a$15:$b$15" Then lngWurf = 25
    If Target.Address = "$c$15:$d$15" Or Target.Address = "$c$16:$d$16" Then
         lngWurf = 50        '50 Zuweisen
         lngDT = 2           'Marker für Doppel setzen
    End If

beim 1ten Wurf, egal was für ein Doppel geworfen wird müsste In K19 erscheinen aber ich denke du weist das.

Jetzt erscheint laufzeitfehler 13

'Ergebnis des Wurfes eintragen
lngWurf = Target.Value

Gruß Adde

+1 Punkt
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Adde,

ich hatte das nicht getestet sad.

So sollte es aber funktionieren:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lngSpieler As Long
Dim lngSpalte As Long
Dim lngWurf As Long
Dim lngDT As Long
Dim strSpiel As String
Dim lngZeile As Long
Dim lngSZeile As Long
Dim lngWZeile As Long
Dim lngWSpalte As Long
Dim lngAnsage As Long
Dim bUeberw As Boolean
Dim i As Long

ActiveSheet.Unprotect

'Nur bei Klick im Bereich von A4 bis F14 ausführen
If Intersect(Target, Range("A4:F15, C16:D16")) Is Nothing Then Exit Sub

'nicht in Zelle klicken
Cancel = True

'Nummer des Spielers einlesen
lngSpieler = Range("g1").Value
 
'Spalte für Spieler ermitteln; Spieler stehen in Spalten K bis JZ
lngSpalte = 8 + lngSpieler * 3

'Doppel und Triple ermitteln
If Target.Column = 2 Then lngDT = 2    'Marker für Doppel setzen
If Target.Column = 3 Then lngDT = 3   'Marker für Triple setzen
'Prüfen ob Zelle verbunden ist
If Target.Cells.Count > 1 Then
   'falls ja dann die entsprechenden Werte in Variable schreiben
    If Target.Address = "$a$15:$b$15" Then lngWurf = 25
    If Target.Address = "$C$15:$D$15" Or Target.Address = "$C$16:$D$16" Then
         lngWurf = 50        '50 Zuweisen
         lngDT = 2           'Marker für Doppel setzen
    End If

         'prüfen, ob Fehlwurf
    If Target.Address = "$e$15:$f$15" Then lngWurf = 0
    
  Else
    If Target.Address = "$C$15" Then
       lngWurf = 50        '50 Zuweisen
       lngDT = 2           'Marker für Doppel setzen
     Else
       'falls kein Fehlwurf
        lngWurf = Target.Value
        If Target.Column = 2 Or Target.Column = 5 Then lngDT = 2  'Marker für Doppel setzen
        If Target.Column = 3 Or Target.Column = 6 Then lngDT = 3   'Marker für Triple setze
     End If
End If

'wenn Überworfen,
If Cells(6, lngSpalte) - lngWurf < 0 Then
  'dann Wurfergebnis auf Null setzen
  lngWurf = 0
  'Marker für überworfen setzen
  bUeberw = True
End If

'wenn Überworfen, dann Wurfergebnis auf Null setzen
If Cells(6, lngSpalte) - lngWurf < 0 Then lngWurf = 0
 
'Zeile für Würfe suchen
'dazu die Nr des Spielers herausfinden und damit Suchstring erstellen
strSpiel = "Sp" & Range("G1")
 
'Zeile für Spiel suchen
For lngZeile = 19 To 286
  If Cells(lngZeile, 1).Value = strSpiel Then
    lngSZeile = lngZeile
    Exit For
  End If
Next lngZeile

'Zeile für Eintrag der Würfe suchen
lngWZeile = 19 + WorksheetFunction.RoundDown(Cells(lngSZeile, 10).Value / 3, 0)
   
'Spalte für den Eintrag der Würfe ermitteln
lngWSpalte = WorksheetFunction.RoundDown(Cells(lngSZeile, 10).Value / 3, 0) + 2
'Würfe der Runde auf Null setzen, wenn überworfen
If bUeberw = True Then
  For i = 1 To Cells(lngSZeile, lngWSpalte).Value
    Cells(lngWZeile, lngSpalte + Cells(lngSZeile, lngWSpalte).Value - i) = 0
  Next i
  
End If

'Anzahl Würfe erhöhen
Cells(lngSZeile, lngWSpalte) = Cells(lngSZeile, lngWSpalte).Value + 1

'Anzahl Doppel erhöhen
If lngDT = 2 Then Cells(11, lngSpalte + 1) = Cells(11, lngSpalte + 1).Value + 1
'Anzahl Triple erhöhen
If lngDT = 3 Then Cells(11, lngSpalte + 2) = Cells(11, lngSpalte + 2).Value + 1

'Würfe eintragen
'hier mit Doppel-IN, also nur dann eintragen, wenn 1 Doppel eingetragen wurde
If Cells(11, lngSpalte + 1).Value > 0 Then

'Würfe eintragen
Cells(lngWZeile, lngSpalte + Cells(lngSZeile, lngWSpalte).Value - 1) = lngWurf
'Daten für die Rücknahme des Wurfes in das Array schreiben
arrRueck(0) = lngSZeile                                            'Zeile für Eintrag des Wurfs
arrRueck(1) = lngWSpalte                                           'Spalte für Eintrag des Wurfs
arrRueck(2) = lngSpalte                                            'Spalte für Spieler
arrRueck(3) = lngWZeile                                            'Zeile für Ergebnis des Wurfs
arrRueck(4) = lngSpalte + Cells(lngSZeile, lngWSpalte).Value - 1   'Spalte für Ergebnis des Wurfes
arrRueck(5) = lngDT                                                 'Doppel oder Triple
  Else
'falls noch kein Doppel vorliegt, Ansage für Wurf in No Score ändern
lngWurf = 0
     
End If
'hier für die Ansage und Anzeige
'prüfen, ob Überworfen
If bUeberw = True Then
  Start_Ansage (0)
Else
'Ansage Wurfergebnis

Start_Ansage (lngWurf)
If lngWurf > 0 Then Start_Ansage (lngWurf)
'Checkout; 999 = Game over
If Cells(1, lngSpalte).Value = "Checkout" Then Start_Ansage (999)

  'prüfen ob Anzahl der Würfe ohne Rest durch 3 Teilbar ist oder Checkout vorliegt
  If Cells(lngSZeile, lngWSpalte).Value Mod 3 = 0 And Cells(1, lngSpalte).Value <> "Checkout" Then
   'Anzeige
    Range("KA12") = "Geworfen: " & Cells(arrRueck(3), arrRueck(4)).Value + Cells(arrRueck(3), arrRueck(4) - 2) + Cells(arrRueck(3), arrRueck(4) - 1) & vbLf & "Rest: " & Cells(6, arrRueck(4) - 2).Value
    lngAnsage = Cells(lngWZeile, lngSpalte + Cells(lngSZeile, lngWSpalte).Value - 1) + Cells(lngWZeile, lngSpalte + Cells(lngSZeile, lngWSpalte).Value - 2) + Cells(lngWZeile, lngSpalte + Cells(lngSZeile, lngWSpalte).Value - 3)
    Start_Ansage (lngAnsage)
    'Anzeige nach 2 Sekunden wieder löschen
    Application.Wait Now + TimeValue("00:00:2")
    Range("KA12") = ""
  End If
End If

'Checkout; 999 = Game over
If Cells(1, lngSpalte).Value = "Checkout" Then Start_Ansage (999)

If Not Intersect(Target, Range("B2:B14,E2:E14,C15")) Is Nothing Then
        'Doppel
        Cells(1 + Range("J1").Value, 422) = "ja"
    Else
        'kein Doppel
        Cells(1 + Range("J1").Value, 422) = "nein"
End If

ActiveSheet.Protect
End Sub

Gruß

M.O.

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo M.O.,

danke vorab werde es später testen.

Wollte dir nur mitteilen, das ich auch etwas gemacht habe und zwar folgendes:

Das war das Alte 

 'falls kein Fehlwurf
      lngWurf = Target.Value
      If Target.Column = 2 Or Target.Column = 5 Then lngDT = 2  'Marker für Doppel setzen
      If Target.Column = 3 Or Target.Column = 6 Then lngDT = 3   'Marker für Triple setze
End If
 

Das habe ich verändert:

NEU
   'falls kein Fehlwurf
      lngWurf = Target.Value
      If Target.Column = 1 Or Target.Column = 2 Then lngDT = 1  'Marker für Doppel setzen
      If Target.Column = 2 Or Target.Column = 3 Then lngDT = 2   'Marker für Triple setze
End If

 Kurioserweise funktioniert dies .

Nochmals vielen lieben Dank

Gruß Adde

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)
Haollo M.O.

nochmals vielen lieben Dank für deine Unterstützung, habe es ausprobiert, doch es war fast alles rot und hat leider nicht geklappt, aber nicht schlimm.

das was ich ausprobiert habe ging zwar mit 50 als DAOPPEL IN nur nicht wenn ich eine andere Zahl zB. die 19 als Doppel angeklickt habe war wieder die Ansage No Score. was habe ich gemacht!

Habe das ALTE und meine Veränderung zusammen getan und jetzt macht es da was ich wollte.

Else
   'falls kein Fehlwurf
      lngWurf = Target.Value
      If Target.Column = 2 Or Target.Column = 5 Then lngDT = 2  'Marker für Doppel setzen
      If Target.Column = 3 Or Target.Column = 6 Then lngDT = 3   'Marker für Triple setze
   'falls kein Fehlwurf
      lngWurf = Target.Value
      If Target.Column = 1 Or Target.Column = 2 Then lngDT = 1  'Marker für Doppel setzen
      If Target.Column = 2 Or Target.Column = 3 Then lngDT = 2   'Marker für Triple setze
End If

Es tut mir so leid, das du so viel Zeit investiert hast um mir zu helfen.

Trotzdem noch einmal herzlichen dank dafür.

Gruß Adde
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Adde,

das mit der Ansage konnte ich natürlich nicht testen. Freut mich, dass es dennoch so klappt, wie du willst.

Gruß

M.O.
...