771 Aufrufe
Gefragt in Tabellenkalkulation von robbi58 Mitglied (978 Punkte)

Nachdem das Ausblenden von Zeilen in Kombination mit dem Blattschutz nicht richtig funktioniert, habe ich beschlossen, das  Arbeitsblatt anders aufzubauen:

Mit den Buttons in der Spalte A navigiere ich zu den einzelnen Arbeitsblättern (Level 1-4; sheet 1 -4 wird später ausgeblendet). Zu jedem Arbeitsblatt gehört ein sheet, in das ich unterschiedliche Aufgaben geschrieben habe (Level1 und sheet 1 gehören zusammen, Level 2 und sheet 2 ,...).

Mit dem CommandButton (Aufgabenblatt erzeugen) will ich nun die Aufgabenstellungen von sheet  1 auf Level 1, von sheet 2 auf Level 2 usw. übertragen, bzw. generieren lassen. Das funktioniert bei sheet 1 und Level 1 fast problemlos:

Public Sub CommandButton6_Click()

Dim i, RowNum
Worksheets("Level1").Range("B:B").ClearContents
For i = 1 To 5
generate:
RowNum = Application.RoundUp(Rnd() * 13, 0)
Cells(i, 3).Value = RowNum
If Application.CountIf(Worksheets("Level1").[B:B], Worksheets("sheet1").Cells(RowNum, "A")) = 0 Then
Worksheets("Level1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet1").Cells(RowNum, "A").Value
Else
GoTo generate
End If
Next i
End Sub

Allerdings schreibt das Programm auch Zahlen im Arbeitsblatt "Kompetenzraster" in den Zellen C1:C5 (siehe beigefügtes Bild). Warum das so ist, kann ich leider nicht nachvollziehen. Nun möchte ich aber mit demselben Button auch auf Level 2 mit sheet 2 , Level 3 mit sheet3, usw. die Zufallsfragen generieren. Habe alles mögliche probiert und in den Foren recherchiert, jedoch noch keine passable Lösung gefunden. Guter Rat ist teuer!

Ich bedanke mich jetzt schon für eure Anregungen.

Robert

PS: warum mit einem Button alles gleichzeitig generieren (ich möchte dem Bearbeiter die Möglichkeit geben, zwischen den Levels hin- und herzuklicken, ohne die Fragen stets neu zu generieren. Damit kann man bei bereits erledigten Aufgabenstellungen nachschlagen.

16 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Robert,

erkläre doch am besten mal, was du erreichen willst. Ich sehe zwar die Mappe, aber ich weiß z.B. nicht in welches Arbeitsblatt bzw. welche Arbeitsblätter die Zufallszahlen geschrieben werden sollen. In die Sheets oder in die Level?

Und wie soll es dann weitergehen?

Gruß

M.O.
0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Bearbeitet von robbi58
Mein Plan wäre folgender: man drückt den CommandButton auf dem Blatt Kompetenzraster (der längliche, mit dem man ein Arbeitsblatt erzeugen kann; CommandButton 6). Drückt man diesen, dann soll folgendes passieren: auf Blatt Level 1 soll in Spalte B per Zufall die Angaben aus Spalte A von sheet 1 generiert werden. Zugleich sollen in Level 2 in Spalte B die Angaben von sheet 2, Spalte A übertragen werden. Level 3, Spalte B die Angaben aus sheet 3, Spalte A und in Level 4, Spalte B die Angaben aus sheet 4, Spalte A. Den Rest mache ich mit SVerweis. Oder anders ausgedrückt: was in den sheets in den Spalten A und B steht, soll bei den Levels in die Spalten B und C rein.

In Level 1 hat es ja mit Einschränkungen funktioniert.

Ich hoffe, ich habe mich verständlich genug ausgedrückt.

LG Robert
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)

Hallo Robert,

ich habe mal etwas gebastelt: https://filehorst.de/d/cIiasueb

Hier der Code:

Private Sub CommandButton6_Click()
Dim i As Long
Dim d As Long
Dim iZ As Long
Dim RowNum As Long
Dim strName1 As String
Dim strName2 As String
Dim lngLetzte As Long
Dim arrFeld()
Dim iTemp

'Durchlauf für 4 Blätter
For d = 1 To 4
 'Namen der Blätter definieren
 strName1 = "sheet" & d
 strName2 = "Level" & d
 
 'Es sollen 5 Aufgaben zufällig ausgewählt werden.
 'Die Aufgaben stehen in den Arbeitsblättern sheet1 bis sheet4. Daher wird ersteinmal nachgeschaut, wieviel Aufgaben in dem Arbeitsblatt in Spalte A stehen
 lngLetzte = Worksheets(strName1).Cells(Rows.Count, 1).End(xlUp).Row
 'Nun wird ein Feld mit den Zeilennummern generiert
  ReDim arrFeld(lngLetzte)
  For i = 1 To lngLetzte
    arrFeld(i) = i
  Next i
  'Dieses Feld wird jetzt gemischt
   For i = lngLetzte To 1 Step -1
            Randomize Timer
            iZ = Int((i * Rnd) + 1)
            iTemp = arrFeld(iZ)
            arrFeld(iZ) = arrFeld(i)
            arrFeld(i) = iTemp
   Next i
   'und nun werden die ersten fünf gemischten Zeilennummern in die betreffenden Level-Blätter kopiert
   For i = 1 To 5
    Worksheets(strName2).Cells(i + 1, 2) = Worksheets(strName1).Cells(arrFeld(i), 1)
   Next i
Next d

End Sub

Schau mal, ob der Code jetzt so funktioniert, wie du willst.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (978 Punkte)
Hallo M.O.

Jetzt ist es genauso, wie ich es mir vorgestellt habe. Per Mausklick werden Arbeitsblätter mit 4 unterschiedlichen Levels kreiert. Mit den Daten aus den Sheets gestalte ich noch auf den Blättern noch Aufgabenstellungen, die zu bearbeiten sind. Mit deiner Hilfe habe ich schon ein ähnliches Blatt mit Navigation geschaffen, allerdings wird dabei bei jedem Wechsel in die Levels die Aufgabenstellung neu gemixt.

Ich bedanke mich recht herzlich für deine hilfsbereite Art, die ja auch sehr zeitaufwändig ist, ohne die ich nie so weit gekommen wäre.

Robert
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Robert,

danke für die Rückmeldung. Es freut mich, dass es jetzt so klappt, wie du willst.

Gruß

M.O.
0 Punkte
Beantwortet von joe-ker Einsteiger_in (21 Punkte)
...