Excel: Zeile als erledigt markieren mit Makro

Hallo Leute,

ich habe mir eine Excelliste zusammengebaut, auf der man mehrere Variablen eingeben kann. Per Makro werden diese dann in einer Zeile in mehreren Spalten zusammengefügt.
In jeder Zeile hab ich einen Checkbox Button mit dem ich gerne die Zeile in dem der Button ist grau einfärben möchte.

Mein Problem ist nun, dass ich es in VBA nicht schaffe den Code so zu schreiben, dass bei betätigung des Checkbox Button genau die Zeile eingefärbt ist, in der der Button ist.

Kann mir hier vielleicht einer weiter helfen ???

Hallo,
ich verstehe das Problem nicht ganz. Wenn jede Zeile einen CheckBox-Button hat ist die Zuordnung doch relativ einfach? Da VBA bei Steuerelementen keine Indizierung kennt hat jede Box ihren eigenen Namen und ihre eigene Ereignisroutine, in der kann man dann die Zeilennummer hinterlegen (ggf. beim Entwurf im Tag des Buttons). Oder liegt das Problem beim Einfärben? Dann einfach mal einen Makromitschnitt beim manuellen Einfärben der Zeile machen und den Code übernehmen/anpassen.
Viel Erfolg
Rainer

ok, ich es nicht ausrechend genug erklärt. Ich gebe in die Eingabemaske mehre Variablen ein, die dann auf Knopfdruck nach unten in eine übersicht kopiert werden. Hierfür kopiere ich immer automatisch eine Vorlage und lass dann die Infos in die dementsprechende Zeilen kopieren. In der Vorlage befindet sich auch die Checkbox. Durch die Kopie habe ich immer die gleiche Box mit dem gleichen Code. Das Problem ist nun, wenn ich auf eine bestimmte Zeile verweise wird bei jedem Button immer die gleiche markiert. Ich würde aber gerne immer nur die markieren in der der gerade gedrückte button ist.

Hallo,
jetzt verstehe ich fast noch weniger. Wenn eine Vorlage kopiert wird ist natürlich der Code immer gleich und ich weiß nicht, wie die Zeile eingefärbt wird (wie wird die Zeile referiert?). Wenn Daten in eine bestimmte Zeile verschoben/kopiert werden ist doch die Zeilennummer bekannt, also diese einfach als nicht lokale Variable deklarieren und verwenden: im Modul ausserhalb der Subs/Functions:
Dim Zeile As Long ’ kann > 32767 sein, daher long!
Beim Einfärben Rows(Zeile).Interior.ColorIndex = …
Viel Erfolg
Rainer

Hallo

Mein Problem ist nun, dass ich es in VBA nicht schaffe den
Code so zu schreiben, dass bei betätigung des Checkbox Button
genau die Zeile eingefärbt ist, in der der Button ist.

Kann mir hier vielleicht einer weiter helfen ???

Hast es mit „Makro Aufzeichnen“ ,dann den Code etwas ändern, versucht.
Das wars!

Das Anklicken einer Checkbox startet ja automatisch das Sub CheckBoxX_Click, wobei X fortlaufend ansteigt für jede Checkbox. Du musst nun leider in jedem CheckBoxX_Click-Sub angeben, was passieren soll. Ich nehme an, dass beim Entfernen des Häkchens die graue Farbe der Zeile auch wieder verschwinden soll? In diesem Fall sähe das Sub für die erste Zeile also beispielsweise so aus:

Private Sub CheckBox1\_Click()
 If CheckBox1.Value = True Then
 Rows(1).Interior.ColorIndex = 15 ' 15= grau
 Else
 Rows(1).Interior.ColorIndex = 0 ' 0 = weiß
 End If
End Sub

Viele Grüße,
BellHouse

In jeder Zeile hab ich einen Checkbox Button mit dem ich gerne
die Zeile in dem der Button ist grau einfärben möchte.

Code so zu schreiben, dass bei betätigung des Checkbox Button
genau die Zeile eingefärbt ist, in der der Button ist.

Hallo Gustlwasser,
mit Userforms (zu der ich den Checkbox-Button zähle) habe ich wenig Erfahrung. Ich glaube aber, dass dieser relativ zur Seite positioniert wird, und nicht Teil der Zeile ist. Die Zeilenzuordnung müsste also über einen Umweg erfolgen (wenn Checkbox1 aktiv, dann Zeile 1 aktiv, oder ähnlich).
Es ist vielleicht nicht so hübsch, aber ein X oder Y(es) oder J(a) in einer bestimmten Spalte liesse sich deutlich einfacher zuordnen.
Wäre das eine akzeptable Lösung für Dich?
MfG MwieMichel

Damit ich mein Problem noch besser erklären kann, habe ich ein Screenshot der derzeitigen Excel Datei gemacht.

https://dl-web.dropbox.com/get/Excel%20Sheet.jpg?w=a…

In den Zeilen 2-3 gebe ich die verschiedenen variablen ein. Drückt man dann auf den Button „Eintrag Hinzufügen“, wird die Zeile 7-8 kopiert und oberhalb eingefügt. Danach lösche ich den Inhalt der neuen Zeile 7-8 und füge die in Zeile 2-3 hinterlegen Inhalte ein. Zum Schluß mache ich noch ein paar Schönheitskorrekturen. Der Button „Erledigt“ kopiert sich auch immer mit. Alle Erledigtbutton sind mit dem gleichen Makro verknüpft. Mein Problem ist nun, wenn eine Zeile erledigt wurde, habe ich es bis jetzt nur hinbekommen, immer die gleiche Zeile grau einzufärben. Ich will aber immer die Zeile einfärben in der ich den „Erledigt“ Button gedrückt haben. Dazu wollte ich auf die Zeile verweisen, in der der Button sitzt. Nur ich weiß nicht wie ich das machen kann !!!

Hallo Gustlwasser,
die CheckBox - Controls sind ja nicht in einer Zelle, sondern in der Tabelle verankert. Somit gibt es keine Möglichkeit automatischer Zuordnung.
Ich würde mal Richtung „Cell link“ nachforschen (Rechtsklick auf Control -> Properties -> Control -> Cell link), aber auch der Weg scheint mir aussichtslos zu sein.
Dann lieber eine Spalte mit Windings-Schriftart formatieren und mit den ‚normalen‘ Zellenwerten arbeiten.

MfG
W.W.

Hallo Gustlwasser,

am einfachsten ist es, wenn man im Code den Checkboxen feste Zeilen zuordnet. Ich habe z.B. eine Checkbox in Zeile Sieben eingefügt und der Code lautet:

Private Sub CheckBox1_Click()
Rows(„7:7“).Interior.ColorIndex = 15
End Sub

ColorIndex 15 ist bei der Standardpalette von Excel grau. Sofern diese verändert wurde, muss der Index entsprechend angepasst werden.

Hinweis: Einen CheckBox Button gibt es nicht, eine CheckBox ist eine CheckBox und ein Button ist ein Button, der anderen Eigenschaften hat als die CheckBox -es kann also zu Irritationen führen :wink:

Hallo,

ich verstehe das Problem nicht,

Gruß

Hallo Gustlwasser,

sorry, hab dein Email erst jetzt gelesen und gesehen, dass bereits mehrere Leute geantwortet haben.

Hoffe, es war bereits die Problemlösung dabei.

Falls nicht, bin ich gerne bereit mich dem Problem anzunehmen.

schönen Gruß
Stefan

Hallo,

wenn Du ein Kontrollkästchen aus der Formular-Symbolleiste genommen hast, musst Du die Zelle vorher selektieren.
So könnte es gehen, wenn das Kontrollkästchen 1 in Zelle E2 steht:

Sub Kontrollkästchen1_BeiKlick()
Cells(2, 5).Select

Wert = ActiveSheet.Shapes(„Kontrollkästchen 1“).OLEFormat.Object.Value

Select Case Wert
Case Is = 1
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
Case Is 1
Selection.Interior.ColorIndex = xlNone
End Select

End Sub

Gruß,
Ptonka

Grüezi Gustlwasser

In jeder Zeile hab ich einen Checkbox Button mit dem ich gerne
die Zeile in dem der Button ist grau einfärben möchte.

Mein Problem ist nun, dass ich es in VBA nicht schaffe den
Code so zu schreiben, dass bei betätigung des Checkbox Button
genau die Zeile eingefärbt ist, in der der Button ist.

Kann mir hier vielleicht einer weiter helfen ???

Hmmmm, welche Art der Checkboxen hast Du den nun eingebaut?

Wenn du diese mit einer Zelle (am besten die ‚hinter‘ der Checkbox liegende) verlinkst kannst Du die Einfärbung über die Bedingte Formatierung, bezogen auf diese Zelle vornehmen.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi Gustlwasser, ich kann über den Link leider nicht auf das Bild zugreifen. Wenn Du tatsächlich Buttons (Userforms) mitkopierst, muss ich, glaube ich passen.
Da bin ich nicht firm. LG MwieMichel

leider kann ich dzt. nicht helfen.

Hallo Gustl,

der Code für die Makros unterscheidet sich etwas, je nachdem ob du Checkboxen aus den Formular-Steuerelementen verwendest oder Checkboxen aus den Activ-X-Steuerelementen.

Für Checkboxen aus den Formular-Steuerelementen benötigst du ein Makro, dass du allen Checkboxen zuweist.

'Code in einem allgemeinen Modul der Datei.

'Dieses Makro allen Checkboxen aus den Formularsteuer-Elementen zuweisen
Sub Checkbox\_Erledigt()
 Dim objShape As Shape
 Dim strCaller As String
 strCaller = Application.Caller
 Set objShape = ActiveSheet.Shapes(strCaller)
 With objShape
 Call Formatieren(.TopLeftCell, .ControlFormat.Value = 1)
 End With
End Sub


'Sub-Routine zum Formatieren der Zeilen mit den Checkboxen
Public Sub Formatieren(rngZelle As Range, boolValue As Boolean)
 If boolValue = True Then
' rngZelle.EntireRow.Interior.ColorIndex = 15 'hellgrau
 rngZelle.EntireRow.Interior.Color = 14211288 'hellgrau
 Else
 rngZelle.EntireRow.Interior.ColorIndex = xlColorIndexNone
 End If
End Sub

Für Checkboxen aus den Active-X-Steuerelementen muss du für jede Checkbox ein Ereignismakro anlegen, welches die Formatieren-Subroutine aufruft mit Zelle und Wert als Parameter.

'Code unter dem Tabellenblatt für Active-X Steuerelemente

Private Sub CheckBox1\_Click()
 With Me.CheckBox1
 Call Formatieren(.TopLeftCell, .Value)
 End With
End Sub

Private Sub CheckBox2\_Click()
 With Me.CheckBox2
 Call Formatieren(.TopLeftCell, .Value)
 End With
End Sub

'usw. für die weiteren Checkboxen

Damit TopLeftCell korrekt funktioniert müssen die Checkboxen in den Zeilen so positioniert sein, dass die linke obere Ecke der Checkbox-Kontur innerhalb der jeweiligen Zeile liegt.

Gruß
Franz

Hallo gustl,

Wäre mal gut zu wissen wie du den Code geschrieben hast, oder wo du dir denkst dass der Fehler ist. Dann könnt ich dir warscheinlich weiterhelfen.
MFG

Hallo Franz,

ersteinmal danke für die Arbeit. Ich habe den Code für Checkboxen aus den Formularsteuer-Elementen versucht. Jedoch wird mir immer der Laufzeitfehler 13 „Typen unverträglich“ in der Zeile „strCaller = Application.Caller“ angezeigt.

Gruß

Martin

Hallo enesc1,

mein Code sieht so aus:

Sub Erledigt()

Range(„B7:H8“).Select
Selection.Interior.ColorIndex = 15
Range(„G7“).Select
ActiveCell.FormulaR1C1 = „=TODAY()“
Range(„G8“).Select
ActiveCell.FormulaR1C1 = ActiveWorkbook.UserStatus(1, 1)
Range(„G7:G8“).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Jedoch wird bei mir immer nur Zeile 7 & 8 grau. Ich weiß nicht, wie ich dem Code sagen kann, dass er die Zeile eingrauen soll, in der die gedrückte Checkbox liegt. Wenn ich allen Checkboxen das gleiche Makro zuweise.

Gruß