Excel, Kontrollkästchen einfügen, wenn Bedingung erfüllt

...komplette Frage anzeigen

3 Antworten

Probiers mal damit:

Sub Kontrollkästchen_iamiam()
'Application.ScreenUpdating = False '<<rate ich ab, lieber ein paar Minuten drauflegen.

Dim c

For Each c In Range("A5:A1000".SpecialCells(xlCellTypeConstants)

With ActiveSheet.CheckBoxes.Add(15, (c.row - 1) * 15, 60, 15)

.LinkedCell = c.offset(0, 2)

.Characters.Text = ""

End With

Next

For Each c In Range("A5:A1000").SpecialCells(xlCellTypeFormulas)

With ActiveSheet.CheckBoxes.Add(15, (c.row - 1) * 15, 60, 15)

.LinkedCell = c.offset(0, 2)

.Characters.Text = ""

End With

Next

Application.ScreenUpdating = true 'muss unbedingt rein, wenn oben false!

End sub

2 Bemerkungen:
1. Hast Du nur einen Zelltyp (Feste Werte = xlCellTypeConstants), kannst du die zweite Schleife löschen.
2. Die Position habe ich so interpretiert, dass die Zeilenhöhe überall 15 (Pixel?) ist. sind die Titelzeilen abweichend, muss die Formel so heissen:

...Add(15, (c.row ± x) * 15 + y, 60, 15)...

um die Konstanten ±x und y musst Du dich selbst kümmern. Die Variablen: Wiederholungen und Position werden dadurch überflüssig bzw würden auch nicht mehr funktionieren, da SpecialCells selbst findet, wo es weitergeht.
Auch mit der Syntax von checkboxes kenne ich mich nicht aus (und meine Hilfe funktioniert auf diesem Rechner nicht). Wirst schon klar kommen!

Jetzt mal UNGETESTET, also "auswendig" (;o):
Füge die beiden fetten Zeilen mal in Deinen Code ein, und teste ob es klappt:

Sub Kontrollkästchen_einfügen()

Dim Wiederholungen As Integer, Position As Double

Application.ScreenUpdating = False

Position = 105

For Wiederholungen = 5 To 1000

With ActiveSheet.CheckBoxes.Add(15, Position, 60, 15)

If Cells(wiederholung, 1) <> "" Then

.LinkedCell = "$c$" & Wiederholungen

.Characters.Text = ""

End If

End With

Position = Position + 15

Next

End Sub

Klappt es?

Schleichmichel 16.03.2012, 20:51

Vielen vielen Dank für deine Antwort! Leider bin ich es jetzt gerade mehr als Leid mich mit Excel zu beschäftigen! Hab schon Probleme mit den Augen weil ich so lange vor dem Rechner gesessen habe! Probiere deinen Vorschlag bei Gelegenheit aus! Bekommst auch eine Rückmeldung! Versprochen!!

0
Iamiam 16.03.2012, 23:44
@Oubyi

ich denke, With activesheet ... müsste noch in die if-Abfrage mit rein, bin aber nicht sicher.
Komme ohnehin mit Position nicht ganz klar: wenn es 105 (=7*15) startet und dann mit 5 (to 1000) loslegt: irgendwas reimt sich für mich da nicht ganz.

Aber im Rahmen der Vorgaben müsste dein Vorschlag tun, mich hats nur gereizt, das über specialcells ganz anders zu formulieren!

0
Oubyi 17.03.2012, 00:17
@Iamiam

DANKE, da hast Du recht, man sollte immer genau Referenzieren.
Also:

Korrektur:

If ActiveSheet.Cells(wiederholung, 1) <> "" Then

0

verstehe zwar nicht ganz was du machen willst aber denke mit

if range("A5") <> "" then

...

else

...

oder mit end if beenden

müsste dies umsetzbar sein.

Schleichmichel 16.03.2012, 20:50

Das dient hauptsächlich der Übersichtlichkeit! Und um eine geniale Excel-Liste mit Auswahlmöglichkeit!! ;-) Leider bin ich es jetzt gerade mehr als Leid mich mit Excel zu beschäftigen! Hab schon Probleme mit den Augen weil ich so lange vor dem Rechner gesessen habe! Probiere deinen Vorschlag bei Gelegenheit aus! Bekommst auch eine Rückmeldung! Versprochen!!

0

Was möchtest Du wissen?