1k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Zusammen,

ich habe folgende Problemstellung:

Ich habe 5 Checkboxen in einer Tabelle (Home), welche durch klicken in den Zellen L12:L16 den Wert "WAHR" und "FALSCH" bei leer zurückgeben.

Auf die Ergebnisse in der Spalte L baut dann an weiteres Makro auf.

Jetzt [xurl=http://jamaipa.de|Jamaipa - Suche ohne Spam und Shops]suche[/url] ich nach einer Lösung, welche es ermöglicht die Checkboxen in Abhängigkeit eines Formelergebnisses vorzubefüllen.

Konkret für jede einzelne Checkbox:
Wenn in Zelle J12:J16 Ergebis "1", dann Checkbox ausgewählt, bei "0" leer.

Somit hätte der Anwender eine  Vorauswahl, aber zudem die Möglichkeit auch manuell per Checkbox auszuwählen.

Ich hoffe ihr könnt mir folgen und könnt mir weiterhelfen? :)


Viele Grüße,
David

13 Antworten

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

ein kleines Beispiel, wie du eine Checkbox ansprechen kannst:

[code]Sub test()

With Worksheets("Tabelle1")

 If .Range("A1") = "" Then
  .CheckBox1.Value = True
 Else
  .CheckBox1.Value = False
 End If
 
End With

End Sub
[/code]

Falls du nicht klar kommst, dann beschreibe dein Problem mal genauer, oder lade eine Beispieltabelle auf einem Hoster deiner Wahl (z.B. [url=http://www.filehorst.de/]hier[/url]) und stelle den Link hier ein.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

sorry für meine umständliche Beschreibung... ich gelobe Besserung! :)


Hier mein Code in der Tabelle "Home":

[i]Private Sub Worksheet_calculate()


If Range("J12") > 0 Then
CheckBox1.Value = True

Else
CheckBox1.Value = False

End If

If Range("J13") > 0 Then
CheckBox2.Value = True

Else
CheckBox2.Value = False

End If

If Range("J14") > 0 Then
CheckBox3.Value = True

Else
CheckBox3.Value = False

End If

If Range("J15") > 0 Then
CheckBox4.Value = True

Else
CheckBox4.Value = False

End If

If Range("J16") > 0 Then
CheckBox5.Value = True

Else
CheckBox5.Value = False

End If
End Sub
[/i]
In den Zellen der Spalte J ändert sich der Wert durch eine Formel auf 0 oder 1.
Demzufolge bin ich jetzt mit dem "calculate-Ereignis" unterwegs. Das Passt auch soweit. Ändert sich in den Zellen der Spalte J der Wert wird auch in der Checkbox der Hanken gestetzt (1) oder entfernt (0).

Das wiederum gibt WAHR oder FALSCH in den Zellen L12 bis L16 aus, welche für ein anderes Makro relevant sind.

Jetzt habe ich aber das Problem das das calculate-Ereignis keine manuelle Änderung des Häkchens in der Checkbox zulässt.
Spreche ich die Checkbox mit der Maus an, rufe ich ja eine Änderung in der Spalte L hervor (WAHR oder FALSCH), also greift das Makro und es ändert sich nichts... :(

Viele Grüße,
David
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo David,

das ist das Problem beim Calculate-Ereignis ;-). Sobald im Arbeitsblatt eine Neuberechnung stattfindet, greift das Ereignis. Erschwerend kommt noch hinzu, dass man nicht feststellen kann, welche Zelle das Ereignis ausgelöst hat.
Probiere mal, ob du das auch mit dem Selection-Change-Ereignis hinbekommen kannst.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

oh Gott... kurz gegoogelt und nach hinten umgefallen...

Einfach das Ereignis ändern funzt da nicht oder?

Gruß,
David
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo David,

um mit den Fanta4 zu sprechen: Es könnte so einfach sein, isses aber nicht!
Leider nein.

Ich nehme mal an, dass in den Zellen J12 bis J16 Formeln drin stehen. Mit dem Selection-Change-Ereignis könnte man z.B. die Zellen überwachen, auf die sich die Formel bezieht.
Ohne die Tabelle zu kennen kann ich dir nur schwer Tipps geben.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

Sorry für die späte Rückmeldung... mich hatte die Grippe dahin gerafft... :)

Ok, verstehe.

Dann wäre der Ablauf:

Selection Change überwacht Änderung im Tabellenblatt "Steuertabelle" N4.

In N4 läuft allerdings auch ein SVERWEIS.

Wie müsste der Code aussehen, wenn die Überwachung im Tabellenblatt "Steuertabelle" läuft und auf der Grundlage die Ceckboxen im Tabellenblatt "Home" gemäß diesem Code geändert werden sollen:


[i]If Range("J12") > 0 Then
CheckBox1.Value = True

Else
CheckBox1.Value = False

End If

If Range("J13") > 0 Then
CheckBox2.Value = True

Else
CheckBox2.Value = False

End If

If Range("J14") > 0 Then
CheckBox3.Value = True

Else
CheckBox3.Value = False

End If

If Range("J15") > 0 Then
CheckBox4.Value = True

Else
CheckBox4.Value = False

End If

If Range("J16") > 0 Then
CheckBox5.Value = True

Else
CheckBox5.Value = False

End If

If Range("J17") > 0 Then
CheckBox6.Value = True

Else
CheckBox6.Value = False

End If

If Range("J18") > 0 Then
CheckBox7.Value = True

Else
CheckBox7.Value = False

End If

If Range("J19") > 0 Then
CheckBox8.Value = True

Else
CheckBox8.Value = False

End If

If Range("J20") > 0 Then
CheckBox9.Value = True

Else
CheckBox9.Value = False

End If

If Range("J21") > 0 Then
CheckBox10.Value = True

Else
CheckBox10.Value = False

End If

If Range("J22") > 0 Then
CheckBox11.Value = True

Else
CheckBox11.Value = False

End If

If Range("J23") > 0 Then
CheckBox12.Value = True

Else
CheckBox12.Value = False

End If

If Range("J24") > 0 Then
CheckBox13.Value = True

Else
CheckBox13.Value = False

End If

If Range("J25") > 0 Then
CheckBox14.Value = True

Else
CheckBox14.Value = False

End If

If Range("J26") > 0 Then
CheckBox15.Value = True

Else
CheckBox15.Value = False

End If

If Range("J27") > 0 Then
CheckBox16.Value = True

Else
CheckBox16.Value = False

End If

If Range("J28") > 0 Then
CheckBox17.Value = True

Else
CheckBox17.Value = False

End If

If Range("J29") > 0 Then
CheckBox18.Value = True

Else
CheckBox18.Value = False

End If

If Range("J30") > 0 Then
CheckBox19.Value = True

Else
CheckBox19.Value = False

End If

End Sub[/i]

Vielen Dank für deine Hilfe! :)

VG,
David
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo David,

den Wert der Zellen musst du mit dem Change-Ereignis überwachen. Der Code für das Change-Ereignis gehört in das VBA-Projekt der Tabelle, die überwacht werden soll, hier also in das Tabellenblatt [b]Steuertabelle[/b].
Ich habe den Code etwas vereinfacht, so dass nur die Checkbox geändert wird, bei der im Bereich J12 bis J30 entsprechend etwas geändert wird:

[code]Private Sub Worksheet_Change(ByVal Target As Range)

'Makro  nur ausführen, wenn Zellen im Bereich J12 bis J 30 geändert werden
If Not Intersect(Target, Range("J12:J30")) Is Nothing Then
   'Abhänging von der Zelle die geändert wird, wird die entsprechende Checkboxbox auf wahr oder falsch gesetzt
   'Die Zahl der Checkbox wird wie folgt ermittelt: Zeile die geändert wird minus 11; somit Zelle J12 -> Checkbox1
   If Target.Value > 0 Then
        ThisWorkbook.Worksheets("Home").OLEObjects("CheckBox" & Target.Row - 11).Object.Value = True
      Else
        ThisWorkbook.Worksheets("Home").OLEObjects("CheckBox" & Target.Row - 11).Object.Value = False
   End If

End If

End Sub[/code]
Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

danke für deine schnelle Antwort. Da sieht man, dass man mit entsprechenden Wissen so ein Makro etwas kompakter gestalten kann... ;)

Aber leider funktioniert das Makro nicht. :(

In der Tabelle "Steuertabelle" soll die Änderung des SVERWEIS-Ergebnisses in Zelle "N4" die IF-Schleife (J12:J30) in der Tabelle "Home" auslösen.

Beste Grüße,
David
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo David,

das mit dem SVERWEIS in N4 hatte ich völlig überlesen. Mein gepostetes Makro funktioniert nur, wenn die Zellen J12 bis J30 manuell geändert werden.
Mit dem Change-Ereignis kann man keine Formeln überwachen.
Wie sieht denn diese SVERWEIS-Formel in N4 aus? In welcher Zelle steht denn das Suchkriterium? Und wird das Suchkriterium auch wieder durch eine Formel errechnet oder erfolgt die Eingabe per Hand?

Gruß

M.O.
0 Punkte
Beantwortet von
Guten Morgen M.O.

vielen Dank für deine Rückmeldung!

Das Suchkriterium steht in der Zelle M4 und ist die Zellverknüpfung einer Drop-Down-Auswahlliste. Ausgegeben wird eine fortlaufende Zahl von 1 bis x.

D.h. man könnte ja die Änderung von M4 überwachen, hier wird der Wert ja nicht durch eine Formel geändert, sondern durch eine Zellverknüpfung.

Könnte das klappen? wie müsste der Code dann aussehen?

Kann ich dann am Ende des Tages die Vorauswahl an ausgewählten Checkboxen auch manuell durch setzen oder entfernen des Hakens ändern?

Beste Grüße,
David
...