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

Hallo und guten morgen an das Team 

habe folgendes Problem:

Bei meinem Spiel funktioniert bis bis zur Runde 4 alles, doch sowie ich auf Runde 5 erhöhe, erscheint Laufzeitfehler"5" mit dem Hinweis Ungültiger Prozeduraufruf oder ungültiges Argument.

Runden werden mit Doppelklick in Zelle C1 erhöht. In den Zellen B4 bis F14 sind Zahlen eingetragen deren Punkte werden in den Zellen A18 bis I89 erfasst. 

Die Anzahl der Punkte werden dann in den Zellen L5 bis AI5 für, bis zur 4 Runde übernommen.

Ab Runde 5 sollten dann in den Zellen L12 bis AI12 übernommen werden und Ab Runde 9 in den Zellen L19 bis AI19, wenn alles in Ordnung wäre und ab 5 nicht dieser Fehler angezeigt wird. 

Die Würfe werden in den Zellen für Runde 1 bis Runde 4 in  L31 bis AI 31, Runde 5 bis 8 in den den Zellen L32 bis AI32 und Runde 9 L33 bis AI33

Ich weis leider nicht was ich hier verändern muss hier wird der Fehler angezeigt

 'Nun Zeile für Würfe suchen
  'dazu die Nr des Spiel herausfinden und damit Suchstring erstellen
 strSpiel = "Sp" & Right(Cells(lngEZeile - 3, lngSpalte), Len(Cells(lngEZeile - 3, lngSpalte).Value) - 6)

In der Hoffnung, das mir jemand eine Lösung geben oder erstellen kann.
sollte jemand die Liste benötigen kann ich sie gerne hochladen.

Lieben Gruß Adde
Die komplette Eingabe
  'Nun Zeile für Würfe suchen
  'dazu die Nr des Spiel herausfinden und damit Suchstring erstellen
  strSpiel = "Sp" & Right(Cells(lngEZeile - 3, lngSpalte), Len(Cells(lngEZeile - 3, lngSpalte).Value) - 6)
  'Zeile für Spiel suchen
  For lngZeile = 18 To 89
    If Cells(lngZeile, 1).Value = strSpiel Then
      lngSZeile = lngZeile
      Exit For
    End If
  Next lngZeile

 

25 Antworten

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Adde,

in dieser Codezeile

  'Spalte für Spieler ermitteln; Spieler stehen in Spalten L bis AI
  lngSpalte = 11 + lngSpieler

ermittelst du die Spalte - soweit so gut, ABER in dem Fall wenn der Fehler auftritt, ist lngSpieler = 25 und das ergibt lngSpalte = 36 - also AI und diese Spalte ist leer. Folglich kann - wie ich bereits vermutet hatte - die Funktion Right(Cells(lngEZeile - 3, lngSpalte), Len(Cells(lngEZeile - 3, lngSpalte).Value) - 6) nicht berechnet werden, was zu dem Laufzeitfehler führt.

Bis später, Karin

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)
Guten morgen Karin,

vielen Dank für die Info, schön das du den Fehler erkannt hast könntest du mir noch schreiben was ich machen Bzw. verändern muss? Dass dieser Fehler nicht mehr angezeigt wird, noch ein Hinweis: die Punktzahl ab Spieler 25 müsste in Zeile 5 Spalte 12 usw. übernommen werden und ab Spieler 49 in Zeile 12 Spalte 12

Gruß Adde
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Adde,

verstehe ich das richtig: für Spieler 25-49 und ab 50 sollen die Eintragungen jeweils wieder ab Spalte 12 (L) fortlaufend bis Spalte 35 (AH) erfolgen? Dann müsstest du m.E. die Variable lngSpieler mit einer If-Anweisung ermitteln

  'Nummer des Spielers einlesen
  lngSpieler = Range("G1").Value
  If lngSpieler > 24 And lngSpieler < 50 Then
      lngSpieler = Range("G1") - 24
  ElseIf lngSpieler > 49 Then
      lngSpieler = Range("G1") - 49
  End If
  'Spalte für Spieler ermitteln; Spieler stehen in Spalten L bis AI
  lngSpalte = 11 + lngSpieler

Zu den Zeilen, in die eingetragen werden soll kann ich nichts sagen. An welcher konkreten Stelle im Code werden die Punkte denn in die Zellen geschrieben bzw. die betreffende Zeile ermittelt, in die geschrieben werden soll?

Bis später, Karin

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)
Hallo Karin

habe eine Teillösung erstellt. Verstehe jetzt auch was -3 -6  bedeutet, dies bezieht sich auf die Spalten L bis Q und die Zeilen 5, 12 und 19. Habe folgendes geändert: Die Runden -  Anzahl bleibt auf 1 und die Zelle mit dem Spieler so geordnet, dass diese immer von 1 bis 6 angezeigt wird.

Die Eintragungen erfolgen für Runde 1 in L5 bis Q5

Hat ein Spieler die geforderte Zahl in Runde 1 (hier die  301 ) erreicht, beginnt das Spiel wieder mit dem gleichen Spielernummer 1 bis 6. und die Eintragungen erfolgen dann für Runde 2 in L12 bis Q12 Usw.

Leider habe ich das jetzt nur für 3 Runden da wir aber meistens 10 bis 12 Runden spielen wäre es toll wenn du hier für in der Tabelle die ich zur Verfügung gestellt habe eine Lösung erstellen könntest.

Gruß Adde
0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi Adde,

was meinst du mit "Leider habe ich das jetzt nur für 3 Runden"? Wo sollen denn die anderen Runden hingeschrieben werden - also welche Spalten / Zeilen?

Bis später, Karin
0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)
Guten morgen Karin,

entschuldige bitte, das ich jetzt erst antworte. Hatte sehr viele Arzttermine.

Vielen lieben Dank für deinen Einsatz.

Hoffe, das ich es richtig erkläre.

Die Eintragungen für Runde1, 2 und 3 erfolgen in den Zeilen 5, 12 und 19, die Spalten dafür sind für die Runden 1 bis 3 in Spalte 12 bis spalte 17. Für Runde 4 bis 6, gleiche Zeilen andere Spalten. Beginnend mit Spalte 18 bis 23. Für Runde 7 bis 9 die gleichen Zeilen und Spalten ab 24 bis 29. Für Runde 10 bis 12 gleiche Zeilen mit 30 bis 35 und in C1 erscheint die 1 für Runde 1 bis 3, dann in C1 die 2 für Runde 4 bis 6, dann in C1 die 3 für Runde 7 bis 9, dann in C1 die 4 für Runde 10 bis 12.

In der Hoffnung, das du mir eine Lösung erstellen kannst.

Gruß Adde
+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)

Hi Adde,

versuche mal folgendes: suche deine Kommentarzeile   'Nun Zeile für Würfe suchen und füge unmittelbar davor folgenden Code ein

  Dim intSpalte As Integer
  Select Case Range("C1")
      Case 1, 2, 3
          intSpalte = 0
      Case 4, 5, 6
          intSpalte = 6
      Case 7, 8, 9
          intspalt = 12
      Case 10, 11, 12
          intSpalte = 18
  End Select

Außerdem musst du (an allen Stellen in den nachfolgenden Zeilen bis zum Edne der Prozedur) wo die Variable lngSpalte steht dieses schreiben: lngSpalte + intSpalte . Das Ganze bedeutet, dass in Abhängigkeit von der Spielnummer in C1 ein gewisser Spaltenversatz beim Eintragen der Ergebnisse zur laufenden Spaltennummer hinzugefügt werden soll.

Ob das ganze so funktioniert wie du es wünschst kann ich leider nicht sagen, da es immer schwer ist, einen bereits fertigen Code, den jemand anderes geschrieben hat, komplett zu verstehen, zumal wenn man das System nicht kennt, das dem ganzen zugrunde liegt.

Bis später, Karin

0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo Karin 

vorab heartDank, für deine Mühe. 

Nur zum verstehen:

Case 1,2,3  bedeutet das die Runde oder die Reihenfolge der Spieler oder Spaltenfolge?

Wenn es jetzt nicht mehr klappt dann werde ich es aufgeben und alles löschen.

Gruß Adde

0 Punkte
Beantwortet von beverly_ Experte (3.3k Punkte)
Hi Adde,

Case 1, 2, 3 usw. bedeutet jeweils die Rundenzahl, für die zu der laufenden Spalte ein definierter Wert addiert werden muss, um die richtige Spalte festzulegen. Für die Runden 1-3 muss nichts addiert werden, deshalb die Variable intSpalte = 0. Für die Runden 4-6 muss jeweils 6 addiert werden, damit nicht in die Spalten 12 ff. sondern in die Spalten 12 + 6 = 18 ff. eingetragen wird usw.

Bis später, Karin
0 Punkte
Beantwortet von addeguddi Experte (2.6k Punkte)

Hallo Karin 

vorab nochmals vielen lieben Dank für deine Unterstüzung.

Habe es mit F9 und F8 Taste hin bekommen und er zeigt mir dann den Laufzeitfehler 1004 in besagter Zeile an. Ferner habe ich festgestellt, wenn  ich auf 

strSpiel gehe zeigt er mir 

strSpiel="" 

Cells gehe zeigt er mir

('Cells(lngEZeile,lngSpalte)=<  Fehler Meldung Anwendungsoder Objekdefinerter Fehler

lngEzeile - 3

lngEzeile=0 

lngSpalte gehe zeigt er mir

lngSpalte =12

Len(Cells(lngEZeile - 3 gehe zeigt er mir

lngEzeile=0 

lngSalte  gehe zeigt er mir

lngSpalte = 12

Das ist nochmals der Befehl:

  'Nun Zeile für Würfe suchen
  'dazu die Nr des Spiel herausfinden und damit Suchstring erstellen
  strSpiel = "Sp" & Right(Cells(lngEZeile - 3, lngSpalte), Len(Cells(lngEZeile - 3, lngSpalte).Value) - 6)
  'Zeile für Spiel suchen
  For lngZeile = 18 To 200
    If Cells(lngZeile, 1).Value = strSpiel Then
      lngSZeile = lngZeile
      Exit For
    End If
  Next lngZeile

Das ROTE (CELLS wird der Fehler 1004 angezeigt.

Vielleicht hilft das weiter und kannst dazu eventuell eine Lösung erstellen.

Lieben Gruß und einen schönen 1. Mai

Adde

...