114 Aufrufe
Gefragt in Tabellenkalkulation von robbi58 Mitglied (368 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 (12.2k Punkte)

Hallo Robert,

du hast in deinem Code den Befehl

Cells(i, 3).Value = RowNum

Damit wird in der Tabelle, in der der Code ausgeführt wird, eben die generierte Zufallszahl in Spalte C eingefügt.

Du musst bei der Codezeile auch noch das Tabellenblatt angeben, in das die Zufallszahlen eigentlich eingefügt werden sollen.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (368 Punkte)
Bearbeitet von robbi58
Gluten Morgen, allerseits. Danke fuer die Antwort.

Ich muss die Eingabe abaendern auf:

worksheets(Level1).cells(i,3).Value=RowNum

Denselben Code mit Abaenderungen fuer (Level2,sheet2; Level3;sheet3; ...) kann ich in dasselbe Makro schreiben. Aber wie verbinde  ich diese Anweisungen im CommandButton 6, da ich ja gleichzeitig die Zufallsfragen mit demselben CommandButton in den Blättern Level2, Level3 und Level 4 generieren moechte? Funktioniert das ueberhaupt?

Noch einen angenehmen Tag an alle von Robert
+1 Punkt
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

das könnte so aussehen:

Private Sub CommandButton6_Click()

Dim i As Long
Dim d As Long
Dim RowNum As Long
Dim strName As String

'Durchlauf für 6 Blätter
For d = 1 To 6
 'Namen des Blatts definieren
 strName = "Level" & d
 'nun in allen Arbeitsblättern
 With Worksheets(strName)
  'Spalte B löschen
   .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(strName).[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 With

Next d

End Sub

Probier mal, ob das so für dich funktioniert.

Gruß

M.O.

0 Punkte
Beantwortet von robbi58 Mitglied (368 Punkte)
Bearbeitet von robbi58

Hallo M.O.

Zunächst danke für dein stetes Bemühen.

Ich habe deinen Code ind "Diese Arbeitsmappe" eingefügt, aber irgendwie funktioniert es nicht: in Level 1 werden in der Spalte B die Werte aus sheet 1- Spalte A übertragen, aber nicht auf Level 2 die Werte aus sheet 2-Spalte A, nicht auf Level3 die Werte aus sheet3-SpalteA und Level4 die Werte aus sheet4-SpalteA. Die Ergebnisse will ich dann mit SVerweis in die Blätter eintragen. In den Blättern Level 1 bis Level 4 werden sehr wohl in Spalte C Zahlen eingefügt, aber ich nicht weiß, woher diese stammen. 

Weil die Erklärungen etwas umständlich sind, habe ich das file upgeloadet:

https://filehorst.de/d/cHEurizA

Ich bekomme auch folgenden Debugger:

For d = 1 To 6

 'Namen des Blatts definieren

 strName = "Level" & d

 'nun in allen Arbeitsblättern

 With Worksheets(strName)

  'Spalte B löschen

   .Range("B:B").ClearContents

Ich bin bei der Fehlersuche leider hoffnungslos überfordert. Robert

0 Punkte
Beantwortet von m-o Profi (12.2k Punkte)

Hallo Robert,

in deinem hochgeladenen Arbeitsblatt hast du nur die Arbeitsblätter Level1 bis Level4. Ich hatte da irgendwie bis Level6 den Code geschrieben sad.

Ändere die Schleife für die Arbeitsblätter von

For d = 1 To 6

wie folgt:

For d = 1 To 4

Dann funktioniert der Code.

Gruß

M.O.

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

Ich habe schon beim ersten Probieren die Zahl auf 4 vermindert. Allerdings stellte sich der Erfolg nicht ein. Nachdem ich aber schon mitgekriegt habe, dass mein momentaner Rechner sehr viele Fehlermeldungen aufzeigt (ich muss mal die Einstellungen kontrollieren), werde ich dein Makro morgen, wenn ich  wieder zuhause bin, auf einem anderen Rechner probieren. Weil bei mir zeigt sich auch nach der Änderung dasselbe Bild wie auf meinem geposteten Beispiel.

Vielen, vielen Dank an dich.

Gruß Robert
0 Punkte
Beantwortet von robbi58 Mitglied (368 Punkte)
Bearbeitet von robbi58

Ausprobieren ist gut gesagt: ich verwende Office 365 auf meinem IPadpro und meinem IMac. Bei beiden Geräten erhalte ich die Meldung, dass sie ActiveSheet-Steuerelemente nicht unterstützen und Makros sich nicht aktivieren lassen. Beim IMac gibt es sogar die Schaltflächen „Entwurfsmodus“ gar nicht mehr. Ob es daran liegt, dass ich die Schullizenz verwende und diese nur eine abgesteckte Version beinhaltet? So wie es aussieht, kann ich viele meiner Arbeitsmappen, die ich mithilfe des Forums gestaltet habe, gar nicht nutzen.

Robert

PS: ich habe im Web folgende Stellungnahme auf der Microsoft-Seite gefunden:

Makros in Excel für iPad

Hallo He.R,

die Option wurde bereits im Office 365 User Voice angeboten und abgesagt.     

Leider Apples App Store-Richtlinien verbieten Anwendungen von der Ausführung von externen Code, wie Visual Basic-Makros, als eine Frage der Politik. Sehe Abschnitt 2.5.2 hier: "Apps sollten in ihren Bündeln in sich geschlossen sein und dürfen keine Daten außerhalb des dafür vorgesehenen Containerbereichs lesen, oder schreiben, noch dürfen sie Code herunterladen, installieren, oder ausführen, einschließlich anderer Apps". Da sind auch andere zusätzliche Einschränkungen, die zurzeit die Verwendung von Visual Basic-Makros auf iOS-Geräten unpraktisch.

Bedanke mich für dein Verständnis.

Mit freundlichen Grüßen,

Alexander Petrov

Microsoft Office 365 Support Engineer

0 Punkte
Beantwortet von robbi58 Mitglied (368 Punkte)
Bearbeitet von robbi58

Ich muss mich zum eigentlichen Thema  nochmals melden:

Leider funktioniert der im Forum gepostete Code  (das Beispiel wurde von mir im Forum ja hochgeladen) noch nicht ganz. Das Ergebnis sieht so aus:

Im Arbeitsblatt Level 1 funktioniert der Code, es werden aber statt der im Code geforderten fünf 20 Beispiele angezeigt. Bei den Blättern Level 2 bis 4 erscheinen in den Spalten C Zahlen, deren Herkunft mir nicht bekannt sind. Angezeigt in den Spalten B der Arbeitsblätter Level 2 - 4 sollen jeweils die Werte der Sheets in den Spalten A. Die Zuordnung der Ergebnisse geschieht mittels S-Verweises.

Wer hat einen guten Tipp?

PS: Noch einmal der Link zum file:

https://filehorst.de/d/cjHDsqvf

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

die Mappe ist mit Passwort geschützt und kann leider nicht geöffnet werden.

Gruß

M.O.
0 Punkte
Beantwortet von robbi58 Mitglied (368 Punkte)
Sorry: habe ich leider vergessen, den Blattschutz zu entfernen!

Passwort: 0123

Danke Robert
...