Tabellenblatt mit Kontrollkästchen

Hello

Wer kann mir ein Tabellenblatt erstellen in dem 10 Kontrollkästen
vorhanden sind.

Folgender Umstand:

-Dies soll sich alles auf Tabelle 2 abspielen.
-Die Tabelle sollte nicht gelöscht werden können.
-Wenn das Excelfile ohne dass alle Kontrollkästchen angehakt sind, geschlossen wird, soll eine MsgBox erscheinen die darauf hinweist und ggf abspeichert.
Mit Ja, Nein und Abbrechen soll das File dann entsprechend darauf reagiert werden können.
-Wird geschlossen und alle Häcken sind angekreuzt, wird auch dies dem User durch die MsgBox bekannt gegeben.
Wer kann mir dies zusammenschreiben?

Ich lerne nun schon seit mehreren Tagen VBA aus Büchern. Leider ist es sehr schwierig abseits der Buchvorgabe was zu machen. Der Lerneffekt hält sich sehr in Grenzen. Wie geht ihr damit um?
Gruß Christian

Hallo Christian
-Wer kann mir dies zusammenschreiben?
Naja, ich denke mal nicht, dass jemand interesse hat Stunden aufzuwenden für Deine Ideen.
Fragen werden sicherlich gerne beantwortet, aber gleich solche Codes anforden, da habe ich meine Zweifel.

Also machen Wir einmal den Einstieg miteinander.
Als erstes:
-Dies soll sich alles auf Tabelle 2 abspielen.
-Die Tabelle sollte nicht gelöscht werden können.
Also, warum das ganze in einer Tabelle anlegen und nicht in einer UserForm. Dies ist viel freundlicher und Programmiertechnisch besser(finde ich). Diese Form wird dann auch nicht gelöscht. Also erstelle im Makroeditor eine UserForm. (Unter Symbolleisten, kannst Du die VBA-Symbolleiste aktivieren). Weiter setze im Makroeditor (Visual basic Editor) noch einen Haaken unter Extras/Optionen/Editor/Variablendeklaration erforderlich.
So gebe der UserForm einen Namen. z.B. UfEingabe und lege auf Ihr deine Checkboxen anhand der Toolbox an.
In dem Eigenschaftsfenster musst du jedem Element einen Namen geben. Bei einer Checkbox ist es z.B. chkboxLizenzvertrag. Bei einer TextBox analog txtboxName usw. In der Namengebung bist Du frei, gewöhne Dir aber einen Standart an, so wie ich das gemacht habe, denn eine txtbox ist dan immer eine Textbox…
Im Eigenschaftsfenster kannst Du den Wert Value auf False setzen und es ist als Standart kein Haaken voerhanden. Bei True gibt es dann ein Haaken. Überhaupt kannst Du sehr viel verstellen. Die Windowshilfe gibt sehr gute Auskunft.
Nun erstelle ein Modul Namens mVariable. Dort deklarierst Du alle Public Variablen wie folgt:

Public Variablenname as String
Public Hanswurst as Boolean
Public Piggy as Integer
Public Heiri as Double …usw

Füge Bemerkungen in den Code ein in dem Du zuerst das Hochkomma „’“ in den Code einfügst.
Zeilenumbrüche machst du mit (text, dann Leerschlag_, dann Enter) sprich etwa so: " _"
Erstelle ein zweites Modul namens mDeclarationen. In diesem Modul werden alle Declare anweisungen gespeichert für Windows API oder sonstige unterstützung. So das ist mal das Grundgerüst eines Programmes.

Nun Erstelle das Nächste Modul namens mAuswertung. In dieses Modul führe eine Public Prozedure mit dem Namen „Werteinleser“ ein. (Wichtig Public nicht Private)

Nun machen Wir es so, dass das Resultat aus der UserForm in die Tabelle2 abgespeichert wird. Hinterlege also Durch doppelklicken auf die Checkbox kästchen einen Code:

-Wenn das Excelfile ohne dass alle Kontrollkästchen angehakt
sind, geschlossen wird, soll eine MsgBox erscheinen die darauf
hinweist und ggf abspeichert.

-Das Kontrollkästchen kannst Du als solches nicht speichern, aber die Werte davon auf einem Datenblatt (Tabelle2)
-Dies soll sich alles auf Tabelle 2 abspielen.

Private Sub Chkbox1_click()
'Wenn Du was im Modul hast, kannst Du das wie folgt Aufrufen
mAuswertung.Werteinleser 'Aufrufbeispiel

'Werte in Tabelle2 speichern
'Speichert T wenn True, ansonsten F für False
if Chkbox1.value = True then
tabelle2.cells(row,column) = „T“
'Für row und Column wird eine Ganzzahl Verwendet. (z.B 5,6)
'Wobei row kleiner 65536 und Column kleiner 256 sein muss
else
tabelle2.cells(row,column) = „F“
end if
End Sub

usw.

Damit das mit dem Speichern auch funktioniert gibts noch weitere Codes, die Du unter „Diese Arbeitsmappe“ einfügen solltest.

Sub Workbook_Open()
ufEingabe.show (1) 'Modeless Unabhängig öffnen der Userform
'ufeingabe.hide oder unload me läst die Form wieder verschwinden.
Application.WindowState = xlMinimized 'Minimalisiert Excel
End Sub

Sub Workbook_BeforeClose(Cancel As Boolean)
'Code wird vor dem Schliessen ausgeführt
call mModul.DeineMSGBOXRutine
application.activeworkbook.save false
End Sub

Zur userform, füge noch einen Knopf namens cbWeiter und Caption = Weiter ein. Übrigens alle Optionen, welche Du in den Eigenschaften sehen kannst, kann man auch mit VBA ansteuern.
Beispielcode:
ufEingabe.cbWeiter.enabled=false 'Deaktiviert den Knopf

-Die Tabelle sollte nicht gelöscht werden können.
Da gibt es ein tolles Spielchen mit Tabelle.protect/unprotect
woorkbook.protectsharing/unprotectsharing…
und damit Dir niemand in die Makros schaut, gehe auf Projekteigenschaften vom VBAProjekt und aktiviere dort der Schutz und alles bleibt verschlossen. (Naja, sofern es einen 100% schutz gäbe)

Mit Ja, Nein und Abbrechen soll das File dann entsprechend
darauf reagiert werden können.
dim ausgabe as integer
ausgabe = msgbox(„Hallo“,vbyesno,„Titel“) 'Nein ist glaube ich 7
if not ausgabe = 7 Then modul.ausführen 'Geht auch if ausgabe 7

-Wird geschlossen und alle Häcken sind angekreuzt, wird auch
dies dem User durch die MsgBox bekannt gegeben.

with ufeingabe
if .chkbox1.value = true and _
.chkbox2.value = true and _

.chkbox20.value = true then
msgbox „Alles Ok“
'activeworkbook.close/quit (false)
exit sub
else
…'Not Quit
end if
end with

'Achtung die Werte müssen abgespeichert werden.

Uff! eine Beispieldatei zum Anschauen Sende ich dir gleich noch mit.
Mit F8 kannst Du übrigens den Code Schritt für schritt abspielen lassen
Grüsse Sebastian