744 Aufrufe
Gefragt in Tabellenkalkulation von addeguddi Experte (2.6k Punkte)
Hallo an das Forum Supportnet Team

Wer kann mir eine Lösung zu meinem Problem geben?

Hierbei handelt es sich um ein Dartspiel mit dem Namen: Die Fuchsjagd.

Möchte noch erwähnen, habe in VBA keine Ahnung

Nun zu meiner Bitte und mein Problem:

In der Zelle IE1 wird eine Zahl händig eingegeben und bei Doppelklick in Zellen IK2 bis IN11 funktioniert alles so Lange, wie ich es manuell eingebe, so wie es sein soll.

Doch wenn ich eine Formel in die Zelle IE1 eingebe und ich einen Doppelklick auf die Zellen, entweder IK2 oder IN5 Klicke erscheint:  Laufzeitfehler`13` Typen unverträglich.

Das ist die Formel die in der Zelle IE1 Hinterlegt werden soll.

=WENN(ODER($IB$15=230;$IC$15=230);"230";"")

Hiermit soll erreicht werden, wenn der Wert in IB15 oder IC15 erreicht ist, ist mein Spiel beendet.

In diesen Zellen sind folgende Formel hinterlegt:

In Zelle IB 15: =WENN(IDENTISCH($KE$25;$KJ$25);230;"")

In Zelle IC 15: =SUMME($KE$3:$KE$23)

Für Hilfe wäre ich sehr dankbar

Gruß Adde

26 Antworten

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

Hallo Adde,

ich habe die Tabelle "Spiel 1" etwas bearbeitet und auch das entsprechende Makro angepasst: bearbeitete Tabelle

Schau mal, ob das jetzt alles so klappt, wie du dir das vorstellst.

Gruß

M.O.

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo M.O.

Vorab heart Dank für die Mühe die du dir gemacht hast.

leider nein. Bei Doppelklick erscheint Laufzeitfehler 1004. Das rot Markierte.

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

Lieber M.O. 

Vielen lieben Dank für dein Einsatz, Aber ich denke, dass das nicht so geht wie ich es mir vorgestellt habe.

Mach dir weiterhin keine Bemühungen. Ich lass es so wie es ist. Habe einiges verändert. Es wird mir der Sieger angezeigt so wie ich mir gedacht habe und das mit wenn/oder sollte nur für die Ansage Game Over sein. dies klappt leider nicht. Ist aber auch OK

Wenn ich wieder einmal eine Frage habe, melde ich mich beim Supportnet bis irgendwann einmal

LG Adde

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo M.O.

Berichtigung Fehler Debuggen

Cells(lngSZeile, lngWSpalte) = Cells(lngSZeile, lngWSpalte).Value + 1

lngAnzahl = lngAnzahl + 1

Habe es nochmals geprüft und festgestellt, nach dem ich die Cells(lngSzeile gelöscht habe funktioniert die Eingabe für einen Wurf danach erscheint

 '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

Wenn du das noch beheben kannst dann wäre es genau wie ich es hätte.

Gruß Adde

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

Hallo Adde,

schau mal, ob es so besser ist (hatte natürlich nicht mit leerem Blatt getestet sad).

Die Ansage ist jetzt aus, es sollte nur eine Ansage bei Game-Over kommen. Falls du die Ansage der Punkte brauchst, dann melde dich.

bearbeitete Datei

Gruß

M.O.

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Guten Morgen M.O.

Funktioniert.smiley das ist sehr gut gelöst worden von dir.yes Wenn du noch so nett sein würdest und die Ansage für die einzelne Punktzahl zu integrieren wäre es vollbracht.

Liebe Grüße

Adde

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

die Ansage baue ich dir wieder ein.

Gruß

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

Danke und einen schönen Tag noch.

Gruß Adde
0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo M.O.

habe es geschafft mit Ansage der Punkte.

Habe in VBA folgendes ergänzt. 

'Ansage Wurfergebnis

If lngWurf > 0 Then Start_Ansage (lngWurf)

Es funktioniert und du brauchst dir keine Mühe mehr zu machen.

Ich danke dir noch einmal für deine Hilfe und Unterstützung. Bis irgendwann einaml

heartliche Grüße Adde

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

war etwas voreilig. Es klappt fast alles sowie ich es mir vorgestellt habe, doch leider sagt er mit no score nicht an wenn ich auf IJ3.

Vielleicht wenn es deine Zeit erlaubt noch einmal über das VBA zu schauen was ich falsch gemacht habe.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveSheet.Unprotect
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 lngAnzahl As Long
Dim lngAnsage As Long
Dim i As Long

'Nur bei Klick im Bereich von IK2 bis IP12 ausführen
If Intersect(Target, Range("ie1", "ik2:io12")) Is Nothing Then Exit Sub

'nicht in Zelle klicken
Cancel = True

'Bei Klick in IE1 = Game on - Ansage starten
If Target.Address = "$IE$1" Then
  lngAnsage = 998
  'Ansage starten
  Start_Ansage (lngAnsage)
  'dann Makro wieder verlassen
  Exit Sub
End If

'Nummer des Spielers einlesen
lngSpieler = Range("G1").Value
 
'Spalte für Spieler ermitteln; Spieler stehen in Spalten K bis AH
lngSpalte = 8 + lngSpieler * 3
 
'Prüfen ob Zelle verbunden ist
If Target.Cells.Count > 1 Then
   'falls ja dann die entsprechenden Werte in Variable schreiben
    If Target.Address = "$IK$12:$IL$10" Then lngWurf = 25
    If Target.Address = "$IM$12:$I0$12" Then
         lngWurf = 50        '50 Zuweisen
         lngDT = 2           'Marker für Doppel setzen
    End If

         'prüfen, ob Fehlwurf
    If Target.Address = "$Ij$3" Then lngWurf = 0
    
  Else
   'falls kein Fehlwurf
      lngWurf = Target.Value
      If Target.Column = 246 Or Target.Column = 249 Then lngDT = 2  'Marker für Doppel setzen
      If Target.Column = 247 Or Target.Column = 250 Then lngDT = 3   'Marker für Triple setze
End If
 
'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 128
  If Cells(lngZeile, 1).Value = strSpiel Then
    lngSZeile = lngZeile
    Exit For
  End If
Next lngZeile

'Zeile für Eintrag der Würfe suchen
'Anzahl der Würfe auslesen
'Prüfen, ob schon eine Zahl in Spalte J steht
If Cells(lngSZeile, 10) = "" Then
  lngAnzahl = 0
 Else
  lngAnzahl = Cells(lngSZeile, 10).Value
End If

lngWZeile = 19 + WorksheetFunction.RoundDown(lngAnzahl / 3, 0)
   
'Spalte für den Eintrag der Würfe ermitteln
lngWSpalte = WorksheetFunction.RoundDown(lngAnzahl / 3, 0) - WorksheetFunction.RoundDown(lngAnzahl / 24, 0) * 8

If lngWSpalte = 0 Then lngWSpalte = 2

'Anzahl Würfe erhöhen

lngAnzahl = lngAnzahl + 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
Select Case lngAnzahl - Int(lngAnzahl / 3) * 3
  Case Is = 0
    Cells(lngWZeile, lngSpalte + 2) = lngWurf
    arrRueck(4) = lngSpalte + 2                   'Spalte für Ergebnis des Wurfes
  Case Is = 1
    Cells(lngWZeile, lngSpalte) = lngWurf
    arrRueck(4) = lngSpalte
  Case Is = 2
    Cells(lngWZeile, lngSpalte + 1) = lngWurf
    arrRueck(4) = lngSpalte + 1
End Select

'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

'Ansage Wurfergebnis
If lngWurf > 0 Then Start_Ansage (lngWurf)

'Checkout; 999 = Game over
If Range("IE1").Value = 230 Then Start_Ansage (999)
ActiveSheet.Protect
End Sub

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

Hallo Adde

ändere die Zeile

If Intersect(Target, Range("ie1", "ik2:io12")) Is Nothing Then Exit Sub

wie folgt ab:

If Intersect(Target, Range("ie1, ij3, ik2:ip12")) Is Nothing Then Exit Sub

und ergänze nach

'nicht in Zelle klicken
Cancel = True

den folgenden Code:

If Target.Address = "$IJ$3" Then
 '0 = No Score
 lngAnsage = 0
 'Ansage starten
 Start_Ansage (lngAnsage)
 'dann Makro wieder verlassen
 Exit Sub
End If

Dann sollte auch wieder die Ansage "No Score" kommen.

Gruß

M.O.

...