1.8k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo!

Ich habe eine Liste mit mehreren Einträgen pro Zeile und würde gerne
einen ON/OFF Button einfügen, damit die Zeile in der sich der Button
befindet aktiviert oder deaktiviert wird. Es würde mir schon reichen,
wenn es bei Klick auf den Button der sich in A1 befindet eine "1" in Zelle
B1 schreiben würde. Das Makro sollte ich dann so kopieren können,
dass das in den nachfolgenden Zeilen das gleiche passiert (A2>B2
usw.) Wenn es eine andere Lösung gibt, wäre das natürlich au ok.

Vielen Dank im Voraus!

9 Antworten

0 Punkte
Beantwortet von computerschrat Profi (33.3k Punkte)
Hallo,

meinst du mit deaktivieren, ausblenden? Einen Button einfügen, der die Zeile ausblendet, könnte ich mir schon vorstellen. Wie aber willst du mit diesem Button die Zeile wieder einblenden, wenn sie doch nicht da ist und der Button damit auch nicht?

Gruß
computerschrat
0 Punkte
Beantwortet von
Nein nicht ausblenden.

Vereinfachtes Beispiel:

Spalte A = Button
Spalte C= Artikel
Spalte D= Preis

Durch Anklicken des Buttons soll der Preis der entsprechenden Zeile
in meine Kalkulation einbezogen werden oder nicht. Das mache ich
mittels Formel. Es würde mir reichen, wenn es per Klick auf den
Button eine „1“ in Spalte B dieser Zeile schreibt. Den Rest mache ich
mit WENN/DANN und dann bräuchte ich halt einen ON und einen
OFF-Button. Gibt sicher elegantere Lösungen, aber das würde schon
reichen.

Genial wäre nur ein Button, der per Klick eine „1“ schreibt und bei
erneutem Klick eine „2“ oder die „1“ wieder löscht.

Besten Dank!
0 Punkte
Beantwortet von flupo Profi (17.9k Punkte)
Buttons in jeder Zeile, die nur einen Wert in eine Zelle schreiben, halte
ich auch für relativ überflüssig. Fast genauso schnell, wie man auf den
Button klickt, hat man die Zahl auch eingegeben.
Alternativen können wir mangels genauerer Infos zum Inhalt der Tabelle
schlecht anbieten.
Sinn machen würde es (aus meiner Sicht) wiederum, bei Bedarf die
Anzeige der mehrzeiligen Einträge auf eine Zeile zu reduzieren. Da
wäre dann der Button möglich. Auch eine Lösung mit Filtern ginge
bestimmt.

Beschreibe dein Anliegen vielleicht doch noch etwas detaillierter.

Gruß Flupo
0 Punkte
Beantwortet von
Hallo Flupo

Da ich mich mit Makros offensichtlich nicht auskenne, mache ich den
ganzen Rest mit Formeln.

Wie bereits erwähnt dient mir der Eintrag "1" in der Zeile nur dazu,
diverse Formeln daran zu knüpfen. Zum Beispiel sollte sich das Format
per Klick ändern, also Klick = Text grün oder so. Das geht nicht mit
Filtern, darum wäre ein Button pro Zeile, schon das was ich will.
0 Punkte
Beantwortet von
Ah, es gibt keine mehrzeiligen Einträge.
0 Punkte
Beantwortet von
Hallo Noobster,

ich stimme Flupo zu, dass es, mindestens genauso schnell geht, die 1 gleich direkt einzugeben. Wenn es dann doch mal etwas schicker aussehen soll, verwende ich meistens eine Checkbox. Die lässt sich an eine bestimmte Zelle knüpfen in der bei aktiviertem Häkchen WAHR steht. Wird das Häckchen rausgenommen steht dort FALSCH.
Wenn du die 1 in deinen Formeln mit Suchen und Ersetzen (STRG+H) in WAHR änderst sollte dein Problem gelöst sein. Zum Masseneinfügen ist allerdings ein Makro sínnvoll.

Hier mal ein Beispiel:

Sub CheckboxEinfuegen()

Spalte = "A"

For z = 2 To 20 'Zeile von/bis
With Range(Spalte & z)
Set cbox = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height)
cbox.Characters.Text = "" 'Hier kannst du eine Beschriftung hinterlegen z.B. = "Box" & z für "Box 1" usw.
cbox.LinkedCell = .Address
End With
Next z

End Sub


Starte den VBA-Editor (Alt+F11) füge den Code in ein beliebiges Modul ein und drücke F5.

Gruß Mr. K.
0 Punkte
Beantwortet von
Das war die einfache Variante. Hier noch die kompliziertere die exakt deinem Wunsch entspricht.

Öffne den VBA Editor (Alt+F11) und füge in ein beliebiges Modul den folgenden Code ein den du EINMALIG mit F5 ausführst.

Sub ButtonEinfuegen()

Spalte = "A"

For z = 2 To 20 'Zeile von/bis
With Range(Spalte & z)
Set btn = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ToggleButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height)
btn.Object.Caption = "Aktivieren" 'Hier kannst du eine Beschriftung hinterlegen z.B. = "Box" & z für "Box 1" usw.
btn.Name = "Button" & .Address
End With
Next z

End Sub


Klicke im Fenster auf Einfügen -> Klassenmodul und gib darin diesen Code ein:
Public WithEvents tbtn As ToggleButton
Private Sub tbtn_Click()
c = Right(tbtn.ShapeRange.Name, Len(tbtn.ShapeRange.Name) - Len("Button"))
If tbtn.Value = True Then Range(c) = 1 Else Range(c) = 0
End Sub


Klicke nun auf das Modul "Diese Arbeitsmappe" und gib dort diesen Code ein:
Dim tb() As New Klasse1

Private Sub Workbook_Open()
MsgBox "Test"
b = 0

For Each t In ActiveSheet.OLEObjects
If InStr(1, t.ProgId, "ToggleButton") > 0 Then
b = b + 1
ReDim Preserve tb(b)
Set tb(b).tbtn = t.Object
End If
Next t

For Each t In ActiveSheet.Shapes
If InStr(1, t.OLEFormat.ProgId, "ToggleButton") > 0 Then
b = b + 1
ReDim Preserve tb(b)
Set tb(b).tbtn = t.OLEFormat.Object.Object
End If
Next t
End Sub
Schließe nun deine Datei (vergiss nicht als xlsm zu speichern!) und öffne sie erneut. Jetzt sollten deine Buttons im Aktivierten Status eine 1 in die darunterliegende Zelle eintragen.

Gruß Mr. K.
0 Punkte
Beantwortet von
uups! Die Zeile Msgbox "Test" kannst du löschen. Die war nur für den Test. :-)
0 Punkte
Beantwortet von
Halloooooo!

Vielen Dank!! Klappt super, die Checkboxen sind mir zu klein. Wir haben hier ein paar ältere Mitarbeiter, die sonst eine
Lupe bräuchten. Dankeschön!!
...