Excel: Schiebepuzzle programmieren - Laufzeitfehler 424?
Liebe Community, ich habe versucht eine Schiebepuzzle aus Zahlen in Excel zu programmieren. Den Text seht ihr unten. Jedoch sobald ich auf Ausführen (Wiedergabe-Button) drücke, kommt folgender Fehler:
Laufzeitfehler '424':
Objekt erforderlich
Könnt ihr mir bitte helfen den Fehler zu finden?
Vielen Dank im Vorraus
Lamio13
Dim xpos As Integer
Dim ypos As Integer
Dim AlleKnoepfe(1 To 15) As CommandButton
Private Sub UserForm_Initialize()
Set AlleKnoepfe(1) = CommandButton1
Set AlleKnoepfe(2) = CommandButton2
...
Set AlleKnoepfe(14) = CommandButton14
Set AlleKnoepfe(15) = CommandButton15
End Sub
Sub FindMich(ich As String)
Dim ii As Integer
Dim jj As Integer
For jj = 1 To 4
For ii = 1 To 4
If (Cells(jj, ii) = ich) Then
xpos = ii
ypos = jj
ii = 5
jj = 5
End If
Next ii
Next jj
End Sub
Private Sub KannMichBewegen()
'untersuche, ob rechts frei ist
If (Cells(ypos, xpos + 1) = "") Then
Cells(ypos, xpos + 1) = Cells(ypos, xpos)
Cells(ypos, xpos + 1) = ""
End If
End Sub
Sub VerschiebMich(SchubladenNummer As Integer)
'untersuche, ob rechts frei ist
If (xpos < 4) Then
If (Cells(ypos, xpos + 1) = "") Then
Cells(ypos, xpos + 1) = Cells(ypos, xpos)
Cells(ypos, xpos) = ""
AlleKnoepfe(SchubladenNummer).Left = AlleKnoepfe(SchubladenNummer).Left + AlleKnoepfe(SchubladenNummer).Width
End If
End If
'untersuche, ob unten frei ist
If (ypos < 4) Then
If (Cells(ypos + 1, xpos) = "") Then
Cells(ypos + 1, xpos) = Cells(ypos, xpos)
Cells(ypos, xpos) = ""
AlleKnoepfe(SchubladenNummer).Top = AlleKnoepfe(SchubladenNumemr).Top + AlleKnoepfe(SchubladenNummer).Height
End If
End If
'untersuche, ob links frei ist
If (xpos > 1) Then
If (Cells(ypos, xpos - 1) = "") Then
Cells(ypos, xpos - 1) = Cells(ypos, xpos)
Cells(ypos, xpos) = ""
AlleKnoepfe(SchubladenNummer).Left = AlleKnoepfe(SchubladenNummer).Left + AlleKnoepfe(SchubladenNummer).Width
End If
End If
'untersuche, ob oben frei ist
If (ypos > 1) Then
If (Cells(ypos - 1, xpos) = "") Then
Cells(ypos - 1, xpos) = Cells(ypos, xpos)
Cells(ypos, xpos) = ""
AlleKnoepfe(SchubladenNummer).Top = AlleKnoepfe(SchubladenNumemr).Top + AlleKnoepfe(SchubladenNummer).Height
End If
End If
End Sub
Private Sub CommandButton1_Click()
FindMich (CommandButton1.Caption)
VerschiebMich (1)
End Sub
...
2 Antworten
Leider kann ich nicht erkennen, welche Zeile Excel als die Zeile markiert hat, in der der Fehler auftritt.
Hast du schon in die Hilfe zur Excel-Entwicklungsumgebung geschaut? Dort am besten nach "Auffangbare Fehler" suchen und unter diesem Stichwort bei der entsprechenden Fehlernummer nachsehen. Da wird im Text, der zu 424 verlinkt ist, u. a. folgendes beschrieben (mit anderen Worten)
Eins der Elemente, von dem eine Eigenschaft oder Methode verwendet werden soll, ist kein Objekt sondern ein "einfacher Typ".
Aber ich möchte mir jetzt nicht die Anwendung nachbauen, um die Anweisung, bei der der Fehler entdeckt wird, herauszufinden.
Hast Du mal versucht, Zeilen/Spalten als Titel zu fixieren ("einfrieren") und die Buttons im linken oberen Eck, das dann ummer sichtbar ist, zu platzieren? Dann dürften die nicht mehr verschwinden!
Ich setz als Command Buttons übrigens immer Textfelder ein, die kann man beliebig formatieren (Farbe/Schriftfarbe und Rahmen) und beschriften!
AlleKnoepfe(SchubladenNummer).Top = AlleKnoepfe(SchubladenNumemr).Top + AlleKnoepfe(SchubladenNummer).Height
Falsch, statt + muss ein - sein, genauso hier:
AlleKnoepfe(SchubladenNummer).Left = AlleKnoepfe(SchubladenNummer).Left + AlleKnoepfe(SchubladenNummer).Width
Jedoch würde ich noch gerne erreichen, dass man mit einem Klick das Spiel zurücksetzen kann und wenn man alles richtig verschoben hat, herausgegeben wird, dass man gewonnen hat.
Meinst du mit "Rücksetzen", dass eine neue zufällige Anfangsstellung erzeugt wird? Dann such im Internet nach "Zufallspermutation". Beachte aber, dass nur ein Teil aller Permutationen auch zu einem lösbaren Puzzle führt. Auslösen mit einem Button.
Oder du lässt zufällig 100 mögliche Züge durchführen, dann sollten die Felder auch gut genug "umgerührt" sein.
Ermitteln, ob man fertig ist: direkt nach dem Verschieben 1. Nachprüfen, ob das gerade verschobene Element an seinem richtigen Ort ist, 2. Nachprüfen, ob alle übrigen Elemente an ihrem richtigen Ort sind
Kannst Du sagen in welcher Zeile der Fehler auftritt?
Das geht aus dem Screenshot nicht hervor.
Notfalls gehe den Code Step by Step mit F8 durch.
(Mit F9 kannst Du ggf. in der ersten Zeile einen Haltepunkt setzen.)
P.S.: Und setze auf jeden Fall mal ein
Option Explicit
über Deinen Code, dann fallen z.B. Tippfehler schneller auf.
Fehler ist gelöst. Siehe auch unten.
Jedoch würde ich noch gerne erreichen, dass man mit einem Klick das Spiel zurücksetzen kann und wenn man alles richtig verschoben hat,
herausgegeben wird, dass man gewonnen hat.
Dieser Fehler war, dass der CommandButton2 nicht existierte, dafür aber ein CommandButton16. Jedoch funktioniert das Spiel immer noch nicht ganz, da manchmal CommandButtons plötzlich aus dem Spielfeld verschwinden, in der Excel Tabelle aber trotzdem an der richtigen Position angezeigt werden.