3.5k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Leute,

ich bin leider totaler Anfänger in Sachen VB und benötige ein wenig freundliche Unterstützung :)

Für einen Berwertungsbogen soll eine Berechnung nach einen Schlüssel erfolgen. Das Ganze sieht wie folgt aus.

- Berwertungsskala 1 2 3 4 5 (z.B. Zellen A1 bis E1)
- unter jedem Wert ist eine Checkbox (z.B. in den Zellen A2 bis E2)
- rechts neben der Bewertungsskala ist eine Zelle mit Multiplikator (z.B. Zelle F1)
- rechts neben dem Multiplikator ist das Ergebnis (z.B. Zelle G1)

Die Checkbox ansich habe ich hinbekommen und weiß auch wie ich zum VB Editor/Code der jeweiligen Box komme. Aber weiter reicht es leider nicht.

Hier ein Berechnungsbeispiel...

Checkbox unter dem Skalawert 3 aktiviert: G1 = C1 * F1

Danke im Voraus für eure Hilfe!

15 Antworten

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

hier mal ein kleines einfaches Beispiel:

Private Sub CheckBox21_Click()
If CheckBox21.Value = True Then
Range("G1") = Range("C1").Value * Range("F1").Value
Else
Range("G1") = 0
End If
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Danke für das Beispiel. Sieht schonmal logisch aus...

Ich bekomme aber immer eine Laufzeitfehler ('424'), Objekt erforderlich. Laut Debugger in der 2. Zeile....

Auf deutsch ist es bei mir das "Kontrollkästchen3" - habe es daher mal mit CheckBox3 probiert, aber ohne Erfolg.

Was mache ich falsch? :-)
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

ein Kontrollkästchen ist keine Checkbox!
Füge kein Formularsteuerelemt (=Kontrollkästchen) sondern ein ActiveX-Steuerelement (=Checkbox) ein.
Mache dann im Entwurfsmodus einen Doppelklick auf die Checkbox, dann öffnet sich der VBA-Editor und du kannst den Code einfügen. Den Namen der Checkbox musst du dann natürlich entsprechend anpassen, aber den siehst du dann ja.
Dann steht bei dir ggf.
Private Sub CheckBox1_Click()

Aber natürlich kannst du auch dem Kontrollkästchen ein entsprechendes Makro (Makro in ein allgemeines Modul kopieren) zuweisen:
Sub kontrollkaestchen3()
If ActiveSheet.CheckBoxes("Kontrollkästchen3").Value = 1 Then
Range("G1") = Range("C1").Value * Range("F1").Value
Else
Range("G1") = 0
End If
End Sub

Das Makro kannst du wie folgt dem Kontrollkästchen zuweisen:
Im Entwurfsmodus Cursor auf das Kontrollkästchen setzen, rechte Maustaste, Makro zuweisen und dann das entsprechende Makro wählen.

Gruß
M.O.
0 Punkte
Beantwortet von
Der erste Tip mit ActiveX und Formular Element ist perfekt!

Danke!!

Nur die Makrovariante wirft noch einen Fehler aus:

Laufzeitfehler '1004'
Die CheckBoxes-Eigenschaft des Worksheet-Objekts kann nicht zugeordnert werden.


Über ActiveX geht's ja, aber über Makro fände ich es schöner...

Nochmal 1k Dank! Das hilft mir echt sehr.
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

was hast du denn jetzt eingefügt? Eine Checkbox oder ein Kontrollkästchen?
Wenn du eine Checkbox eingefügt hast, dann kann das Makro für das Kontrollkästchen natürlich nichts finden.

Mit der Checkbox (ActiveX) wird übrigens auch ein Makro ausgeführt ;-).

Gruß

M.O.
0 Punkte
Beantwortet von
Ich habe einem Kontrollkästchen (Formular) dieses Makro zugewiesen
und den Fehler bekommen.

Sub kontrollkaestchen3()
If ActiveSheet.CheckBoxes("Kontrollkästchen3").Value = 1 Then
Range("G1") = Range("C1").Value * Range("F1").Value
Else
Range("G1") = 0
End If
End Sub


Das AX Kästchen finde ich irgendwie "unsauber". Funktionieren tut es zwar, aber man muß es manchmal 2 x anclicken damit der Hacken gesetzt ist und trotz eingestelleter Transparenz (BackStyle) wird beim Clicken einmal kurz der Kasten in einer anderen Farbe dargestellt. Das wird meine User schnell nerven.

Das Formularkontrollkästchen sieht "sauberer" aus. ;-)
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

heißt dein Kontrollkästchen denn auch "Kontrollkästchen3"? Den Namen kannst du u.a. im Namensfeld (oben links) sehen, wenn du mit dem Cursor das Kontrollkästchen auswählst und dann die linke Maustaste drückst.

Gruß

M.O.
0 Punkte
Beantwortet von
Die Kontrollkästchenbezeichnungen sind jeweils schon richtig....

Muss man evtl noch den Tabellennamen angeben?

Schade, dass das alles so umständlich ist ;D
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

du kannst es mal so versuchen:

Sub kontrollkaestchen3()

With ActiveSheet
If .CheckBoxes("Kontrollkästchen3").Value = 1 Then
.Range("G1") = .Range("C1").Value * .Range("F1").Value
Else
.Range("G1") = 0
End If
End With

End Sub


Ansonsten müsstest du mal bei einem freien Hoster eine Beispieldatei hochladen und den Link dann hier posten, damit man sich deine Tabelle mal ansehen kann.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo zusammen,

Der Name des Kontrollkästchens ist irrelevant. Da es sich um ein Formularelement handelt muss lediglich ein bereits aufgezeichnetes Makro (hier Kontrollkästchen3) eines beliebigen Moduls zugeordnet werden. Das erfolgt über Rechtsklick -> Makro zuordnen.

Wenn ich die Ausgangsfrage richtig verstehe ist das aber nicht unbedingt nötig. Alternativ zur Makrovariante kann über Rechtsklick -> Steuerelement formatieren dem Kontrollkästchen auch eine Zelle zugewiesen werden, in der je nach Status entweder WAHR oder FALSCH steht. Das kannst du dann auch per Formel weiterverarbeiten.

Davon abgesehen: Was machst du eigentlich, wenn 2 Checkboxen aktiviert werden. Wäre hier nicht ein Optionsfeld besser geeignet? Alle Optionsfelder einer Gruppe legen den Wert (hier 1 bis 5) in der selben hinterlegten Zelle ab. Den Wert der Zelle kannst du dann leicht mit dem Multiplikator verknüpfen.

Mr. K.
...