Thema Datum  Von Nutzer Rating
Antwort
Rot Vokabel-lernen
13.04.2021 11:59:48 Marcell
NotSolved
13.04.2021 18:11:38 Gast59435
NotSolved
15.04.2021 11:06:43 Marcell
NotSolved

Ansicht des Beitrags:
Von:
Marcell
Datum:
13.04.2021 11:59:48
Views:
962
Rating: Antwort:
  Ja
Thema:
Vokabel-lernen

Hallo liebe Comunity,

ich bin neu hier und bastel seit einiger Zeit an einem Tool um Vokabeln zu lernen, da ich anfangs nicht wusste ob es klappt wie ich mir das vorstelle, ist der Code über die Zeit gewachsen. Da ich leider kein Experte in VBA bin ist er dadurch nicht wirklich "dry" . Aber ich weiß leider auch nicht wie man es umsetzten kann das er es wird.

Der Grund für das Wachstum des Codes ist jedoch auch in Zukunft notwendig, da ich die Liste an Vokabeln stetig erweitern möchte. Daher wäre es schön wenn man den Code mit wenigen Änderungen, ggf. nur in Variablen auf die neuen Gegebenheiten anpassen kann.

 

Nun aber erstmal die Erklärung wie ich es bisher aufgebaut habe:

 

Ich weiß nicht ob das Einfügen des Bildlinks funktioniert, daher hier nochmal der Link: https://imgur.com/a/okuhv3L

So sieht also meine Abfrage Eingabefenster aus, zur Erläuterung, auch wenn es relativ selbsterklärend ist:

1. Hier wird das abgefragte Wort Angezeigt

2.Hier muss die Antwort eingetippt werden, bei richtiger Antwort erscheint ein "Richtig!"  in der Zeile darunter bei falscher Antwort erscheint "Leider Falsch die Richtige Antwort ist ..." und die richtige Antwort wird angezeigt.

3.Ist der Start Knopf den man vor der ersten Eingabe bei jedem neu Öffnen drücken muss, da er sonst keinen Bezug hat.

4. / 5. nach Eingabe der Antwort muss einer der beiden Buttons gedrückt werden, somit hat man immer die Wahl, auch wenn eine Antwort als falsch angezeigt wird, z.B. auf Grund einer Kleinigkeit (vergessenes Fragezeichen o.ä.) kann man trotzdem sagen das es richtig war

6. Nur kleine Spielereien, Highscore, richtige Antworten infolge etc.

Auf dem letzten Bild sieht man die Wordlist die ich erstellt habe, welche sich entsprechend auch immer erweitert, in Spalte F habe ich ein "Ranking" dies ändert sich entsprechend ob meine Antwort richtig (-1) oder falsch (+1) war. Die höchste Zahl eines Abschnitts wird als nächste Vokabel gewählt.

 

Nun zu meinem Code, ich weiß das es nicht schön ist was ich da gebastelt habe, daher wende ich mich an euch um hier was dazuzulernen und Anregungen bekomme wie man sowas "sauber / dry" umsetzen kann. Ich kenne mich zwar etwas mit VBA aus aber auch dieser Code entstand dann immer mit Unterstützung von Google etc.

 

Private Sub CommandButton1_Click()
Set sh = Sheets(3) 'Edit sheet name

Set Rng = sh.Range("F2:F567")   'change to total range


Mx = WorksheetFunction.Max(Rng)
rw = WorksheetFunction.Match(Mx, Rng, 0) + Rng.Row - 1

Range("C5") = sh.Range("D" & rw)




Cells(15, 3).Clear
Cells(15, 3).Font.Size = 48
End Sub

Private Sub CommandButton2_Click()

            sh.Range("F" & rw).Value = sh.Range("F" & rw).Value - 1
            
            nr = rw
             
            Cells(15, 3).Clear
            Cells(15, 3).Font.Size = 48
            
            Cells(25, 4).Value = Cells(25, 4).Value + 1
            
            If Cells(25, 4).Value > Cells(30, 4).Value Then Cells(30, 4).Value = Cells(25, 4).Value
                        
            
            Dim arr
            arr = Array(1, 95, 190, 285, 389, 480, 517) 'add new array beginning
            
            rando1 = arr(Int(Rnd() * 7)) 'change array Number
            
Debug.Print rando1
            
            If rando1 = 1 Then rando2 = 39
            If rando1 = 95 Then rando2 = 189
            If rando1 = 190 Then rando2 = 284
            If rando1 = 285 Then rando2 = 388
            If rando1 = 389 Then rando2 = 479
            If rando1 = 480 Then rando2 = 516
            If rando1 = 517 Then rando2 = 567 'add new random
            
            
            Cells(42, 3).Value = rando1
            
            
Debug.Print rando2

            Set Rng = sh.Range("F" & rando1, "F" & rando2) 'or whatever
            Mx = WorksheetFunction.Max(Rng)
            rw = WorksheetFunction.Match(Mx, Rng, 0) + Rng.Row - 1

            If nr = rw Then
            
            Randomize
            rw = Int(565 * Rnd) + 2    'change

            Range("C5") = sh.Range("D" & rw)
            
            End If
            
            Range("C5") = sh.Range("D" & rw)


End Sub

Private Sub CommandButton3_Click()


sh.Range("F" & rw).Value = sh.Range("F" & rw).Value + 1

Cells(15, 3).Clear
Cells(15, 3).Font.Size = 48


Cells(25, 4).Value = 0


Randomize
rw = Int(565 * Rnd) + 2   'change

Range("C5") = sh.Range("D" & rw)


End Sub

 

Zur Erläuterung, wenn der Button "Antwort richtig"  (commandButton2) geklickt wird, wird per random eine von inzwischen 7 zahlen aus einem Array gepickt (rando1), zu dieser Zahl gibt es dann jeweils einen 2 Wert (rando2) aus diesen beiden Zahlen ergibt sich eine Range aus derer dann die Zeile gewählt wird die wie zuvor beschrieben das höchste "Rating" hat. Durch diese Unterteilung in mehrere Abschnitte, verhindere ich das mehrfach dasselbe Wort hintereinander kommt weil es ein höheres "Rating" hat als alle anderen Zahlen. Sollte der Fall eintreffen das doch zufällig dasselbe Wort kommt gibt es einen Abgleich, wenn es identisch ist, wird irgendein zufälliges Wort aus der gesamten Liste ausgewählt. Abschließend verringert sich das Ranking um 1. Achso und im oberen Bereich werden noch die Outputs für Highscore etc. abgeglichen.

Beim Drücken auf den Button  "Antwort war falsch" (CommandButton3) wird einfach ein zufälliges Wort aus der gesamten Liste gewählt, der Counter zurückgesetzt und das Rating um 1 erhöht.

 

Die Lösung mit rando1 und rando 2 aus den Arrays war eine Behelfslösung eben um zu verhindern das die Liste stumpf von oben nach unten abgearbeitet wird und mehrfach dieselbe Vokabel hintereinander kommt. Auch zum Updaten ist dies nicht optimal da der code immer an mehreren Stellen geändert werden muss.

Meine Überlegung war jetzt das es schön wäre ein Array zu haben in dem in zufälliger Reihenfolge die 10/20 Vokabeln mit dem höchsten "Rating" stehen, und die Abfrage sich an diesem Array orientiert. Leider kann ich nicht einschätzen ob sowas leicht und sinnvoll möglich ist und schon gar nicht wie man es umsetzen kann. Natürlich bin ich auch für andere Vorschläge offen wie man hier eine Abwechslungsreiche Abfrage, die sich jedoch in der Mehrzahl auf die hohen "Ratings" bezieht erstellen kann.

Wichtig ist natürlich immer, dass das erweitern der Hauptliste hier schnell implementiert werden kann.

 

Ich hoffe ich konnte es Detailliert genug Beschreiben und mein Ziel ist deutlich, ich freue mich über jede Hilfe/Unterstützung. Und noch mal die Info, das ich leider kein experte bin, daher die Bitte auch bei den Antworten etwas ins Detail zu gehen, da ich sonst leider wenig damit anfangen kann.

 

Vielen Dank im Voraus, wenn weitere Informationen benötigt werden bitte Bescheid sagen.


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 Vokabel-lernen
13.04.2021 11:59:48 Marcell
NotSolved
13.04.2021 18:11:38 Gast59435
NotSolved
15.04.2021 11:06:43 Marcell
NotSolved