Thema Datum  Von Nutzer Rating
Antwort
Rot Paramenterübergabe
17.01.2013 14:37:33 Flambo
NotSolved
18.01.2013 10:27:57 Holger
NotSolved
24.01.2013 00:22:07 Flambo
NotSolved
24.01.2013 09:31:53 Max
Solved
24.01.2013 12:54:54 Flambo
NotSolved

Ansicht des Beitrags:
Von:
Flambo
Datum:
17.01.2013 14:37:33
Views:
2702
Rating: Antwort:
  Ja
Thema:
Paramenterübergabe

Der folgende Code generiert beim öffnen der UserForm eine Frage und vier verschiedene Antworten, von denen mind. eine richtig ist

 

Private Sub UserForm_Initialize()
Dim Stadtteil As Integer
Dim ganzerSatz As String
Dim Straße1 As Integer
Dim Straße2 As Integer
Dim Straße3 As Integer
Dim Straße4 As Integer
Const Untergrenze As Integer = 2
Const Obergrenze As Integer = 707
   

Randomize Timer
   
   
Stadtteil = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
ganzerSatz = "Welche der nachfolgenden Straßen gehören zu dem Stadtteil " & Worksheets("Tabelle2").Cells(Stadtteil, "C") & "?"
TextBox1.Text = ganzerSatz
	
   	
Do
	Do
    	Straße1 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    	CheckBox1.Caption = Worksheets("Tabelle2").Cells(Straße1, "B")

    	Straße2 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    	CheckBox2.Caption = Worksheets("Tabelle2").Cells(Straße2, "B")

    	Straße3 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    	CheckBox3.Caption = Worksheets("Tabelle2").Cells(Straße3, "B")

    	Straße4 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
    	CheckBox4.Caption = Worksheets("Tabelle2").Cells(Straße4, "B")
	Loop Until Straße1 <> Straße2 <> Straße3 <> Straße4
Loop Until Worksheets("Tabelle2").Cells(Straße1, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße2, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße3, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße4, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C")
End Sub


Anschließend soll beim Click des Buttons abgeklärt werden, ob die Antwort richtig ist.
- Wenn alle möglichen Antwort richtig ausgewählt wurden erhöht sich der Wert in der TextBox7 um 5
- Ist mind. eine Antwort aber nicht alle richtig erhöht sich der Wert in der TextBox7 um 2
- Ist keine Antwort richtig ausgewählt worden gibt es keine Punkte.

Im folgenden Code habe ich versucht dies umzusetzen

 

Private Sub CommandButton1_Click()
Static cnt As Long
Dim Stadtteil As Integer
Dim ganzerSatz As String
Dim Straße1 As Integer
Dim Straße2 As Integer
Dim Straße3 As Integer
Dim Straße4 As Integer
Const Untergrenze As Integer = 2
Const Obergrenze As Integer = 707
Dim x As Integer
Dim Zähler As String

If cnt >= 5 Then GoTo Neustart

If CheckBox1.Value = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Then
If Worksheets("Tabelle2").Cells(Straße1, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Then
    	If CheckBox1.Value = True Then
CB2:
        	If Worksheets("Tabelle2").Cells(Straße2, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Then
            	If CheckBox2.Value = True Then
CB3:
                	If Worksheets("Tabelle2").Cells(Straße3, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Then
                    	If CheckBox3.Value = True Then
CB4:
                        	If Worksheets("Tabelle2").Cells(Straße4, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Then
                            	If CheckBox4.Value = True Then
                                	TextBox7.Text = TextBox7.Text + 5
                            	Else
                                	TextBox7.Text = TextBox7.Text + 2
                            	End If
                        	End If
                        	TextBox7.Text = TextBox7.Text + 5
                    	Else
                        	TextBox7.Text = TextBox7.Text + 2
                    	End If
                	Else: GoTo CB4
                	End If
                	TextBox7.Text = TextBox7.Text + 5
            	Else
                	TextBox7.Text = TextBox7.Text + 2
            	End If
        	Else: GoTo CB3
        	End If
        	TextBox7.Text = TextBox7.Text + 5
    	Else
        	TextBox7.Text = TextBox7.Text + 2
    	End If
	Else: GoTo CB2
	End If
	

	CheckBox1.Value = False
	CheckBox2.Value = False
	CheckBox3.Value = False
	CheckBox4.Value = False
	

	Randomize Timer
  	
	Stadtteil = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
	ganzerSatz = "Welche der nachfolgenden Straßen gehören zu dem Stadtteil " & Worksheets("Tabelle2").Cells(Stadtteil, "C") & "?"
	TextBox1.Text = ganzerSatz
   
   
	Do
    	Do
        	Straße1 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
        	CheckBox1.Caption = Worksheets("Tabelle2").Cells(Straße1, "B")

        	Straße2 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
        	CheckBox2.Caption = Worksheets("Tabelle2").Cells(Straße2, "B")

        	Straße3 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
        	CheckBox3.Caption = Worksheets("Tabelle2").Cells(Straße3, "B")

        	Straße4 = Int((Obergrenze - Untergrenze + 1) * Rnd + Untergrenze)
        	CheckBox4.Caption = Worksheets("Tabelle2").Cells(Straße4, "B")
    	Loop Until Straße1 <> Straße2 <> Straße3 <> Straße4
	Loop Until Worksheets("Tabelle2").Cells(Straße1, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße2, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße3, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C") Or Worksheets("Tabelle2").Cells(Straße4, "C") = Worksheets("Tabelle2").Cells(Stadtteil, "C")

Else
	UserForm10.Show
	cnt = cnt - 1
End If
Neustart:
cnt = cnt + 1

If cnt <= 4 Then
	x = cnt + 1
	Zähler = "Frage " & x & " von 5"
	Label4.Caption = Zähler
End If

If cnt = 5 Then
	CommandButton1.Caption = "Noch mal?"
	CommandButton2.Caption = "Punkte einlösen"
	
	CheckBox1.Caption = ""
	CheckBox1.Enabled = False
	
	CheckBox2.Caption = ""
	CheckBox2.Enabled = False
	
	CheckBox3.Caption = ""
	CheckBox3.Enabled = False
	
	CheckBox4.Caption = ""
	CheckBox4.Enabled = False
	
	TextBox1.Text = ""
End If
If cnt = 6 Then
	Unload Me
	Unload UserForm8
	UserForm8.Show
End If
End Sub


Ich bin mir nicht genau sicher wo der Fehler liegt, aber ich gehe davon aus, dass die bei Sub UserForm_Initialize() generierten Anfangswerte nicht mit zu Sub CommandButton1_Click übernommen werden.
Alles andere funktioniert, bis auf die If-Verschachtelung zur Ermittlung der Punkte.
Der Fehler Bezieht sich auf Zeile 17 von Code2 (CommandButton_Click) und lautet: "Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler"

Vielen Dank schon mal im Vorraus!


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Paramenterübergabe
17.01.2013 14:37:33 Flambo
NotSolved
18.01.2013 10:27:57 Holger
NotSolved
24.01.2013 00:22:07 Flambo
NotSolved
24.01.2013 09:31:53 Max
Solved
24.01.2013 12:54:54 Flambo
NotSolved