Frage von Bensemilia, 104

Wie formatiere bzw. programmiere ich in Excel Buttons?

Hallo Liebe Excel - Kenner,

ich habe ein paar Fragen, ich bin am verzweifeln hier, weil ich es über VBA nicht hin bekomme die unten abgebildeten Früh, Spät usw. Felder als Button zu formatieren.

  • Ich möchte diese als Button anklicken und dann das der mir die Farbe quasi speichert und ich die in den Plan eintragen kann., aber nur die Farbe.

  • und ist es noch möglich, die Namen als Register zu speichern? sodass ich den ersten Buchstaben eingebe und der mir direkt den kompletten Namen anzeigt?

Ich bedanke mich im voraus und hoffe ihr könnt mir helfen :)

Expertenantwort
von Ninombre, Community-Experte für Excel, 52

So hab ich verstanden (bitte korrigieren wenn es falsch ist) was das Makro tun soll: Der User markiert vorher die entsprechenden Tage und klickt dann auf einen Button, der die ausgewählten Zellen entsprechend färbt

Das könntest Du folgendermaßen angehen: Über den Makrorekorder (Ribbon Entwicklertools) zeichnest Du das Färben auf, ergibt in etwa so einen Code. Normalerweise ist der Makrorekorder nicht so ratsam, weil viel zu viel Code generiert wird, aber um direkt an die gewünschten Farbeinstellungen zu kommen und da sonst nicht viel gemacht werden muss, ist es in diesem Fall schon ok:

Sub Makro1()
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent6
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
End Sub

Das Makro kannst Du dann sinnvoll benennen z.B. sub urlaub()
und mit dem entsprechenden Objekt verbinden: Rechtsklick und aus dem Kontextmenü Makro zuweisen auswählen.

Die zweite Frage müsstest Du noch etwas näher erläutern, das konnte ich nicht nachvollziehen was genau passieren soll.

Kommentar von Bensemilia ,

Hey vielen Dank das du dich gemeldet hast, also ich meine das so:

1.
Ich möchte die Reiter unten Früh, Urlaub, Krank so gesehen als Button benutzen, das heißt für die entsprechen Tage will ich nicht immer die Kästchen einfärben das ist mir zu lästig.. Ich möchte Bsp: früh anklicken das die Farbe praktisch voreingestellt ist und dann markieren und wenn ich den Button wieder deaktiviere das alles wieder normal ist.

Kannst du mich evtl. langsam heranführen bin Neueinsteiger im VBA und habe relativ wenig Erfahrung.

2.
Ich habe in einer anderen Tabelle alle Mitarbeiternamen abgelegt und möchte das wenn ich die Planung mache, nicht jeden Mitarbeiter ausschreiben. Deswegen war meine Frage, ob es möglich wäre so eine Art Vorschlagregister zu programmieren, dass wenn ich einen Anfangsbuchstaben oder einen zweiten eingebe der mir den kompletten Mitarbeiter vorschlägt und ich nur noch auswählen muss.

Ist das möglich?

Vielen Dank im Voraus!

Gruß Manuel

Kommentar von Ninombre ,

zu Punkt 1: Dazu rate ich eher zur Lösung andersherum, also zunächst markieren und dann über den entsprechenden Button die ausgewählten Zellen färben. Das andere wird wesentlich komplizierter: Nach dem Betätigen des Buttons müssen dann alle weiteren Klicks überwacht werden - wenn man erst markiert und dann den Button drückt ist es nur eine Aktion, die ausgeführt werden muss.

Zunächst musst Du den Farbcode für die verschiedenen Varianten ermitteln. Dazu ein Hilfsmakro erstellen. Unter dem Ribbon Entwicklertools mal auf VBA gehen, dort werden dann u.a. die Tabellenblätter der geöffneten Dateien angezeigt. Doppelklick auf die Tabelle wo die Abwesenheitsübersicht steht und dann einfach das reinkopieren:

Sub farbefinden()
ActiveCell.Value = ActiveCell.Interior.Color
End Sub

ActiveCell ist die markierte Zelle
.value ist der Wert der in der Zelle steht
.interior.color ist die Farbe

Der Befehl schreibt also den Farbcode der aktuell markieren Zelle in diese hinein. Mit F5 kann man die Makros laufen lassen - musst dann halt immer zwischen VBA-Fenster und der Tabellenansicht wechseln, um das Ergebnis zu sehen.

Um das für die diversen Schichten-/Abwechsenheiten zu machen, kannst Du unter Ribbon Entwicklertools > Makros > Optionen ein Tastaturkürzel hinterlegen, um das Makro zu starten. STRG + irgendein Buchstabe bzw. wenn diese Kombination schon für Standardbefehle verwendet wird (wie STRG+S = Speichern) macht Excel STRG + SHIFT + Dein Buchstabe daraus.

Dann kannst Du nacheinander die Zellen in Zeile 35 (wo das Farbbeispiel jeweils unter den Button steht) markieren, das Makro starten und bekommst den entsprechenden Farbcode hineingeschrieben.

-> Man könnte auch das Makro so schreiben, dass die Zellen in Zeile 35 automatisch durchlaufen werden, aber ich glaube es ist besser mal einfach anzufangen.

Nachdem Du die Farben hast, kannst Du weitere Makros anlegen, also auf der gleichen Ebene wie das Makro, um die Farben zu ermitteln:

Sub urlaub()
Selection.Interior.Color = 13995347
End Sub

Die Zahl musst Du durch den Farbcode ersetzen, den Du bei "Urlaub" ermittelt hast.

selection ist die Auswahl an Zellen, die mit der Maus markiert wurden. Für diese wird dann die Farbe auf den entsprechenden Wert gesetzt. Mehr muss nicht passieren.

Nun noch dieses Makro mit dem Button verbinden. Dazu Button mit rechter Maustaste anwählen und "Makro zuweisen" = Urlaub auswählen.Wenn Du jetzt Zellen markierst und auf den Button gehst, sollten diese gem. Farbe für Urlaub markiert werden.

Das kannst Du für die anderen Schichten und Abwesenheiten einfach wiederholen: Immer nach dem Schema

sub krank()
selection.interior.color = ....
end sub

Nur der Vollständigkeit halber: Man könnte auch ein einziges Makro erstellen und abfragen, welcher Button gedrückt wurde. Das ist aber aus meiner Sicht umständlicher als diese Minimakros mehrfach zu erstellen.

Zu Frage 2: Über VBA fällt mir da nichts griffiges ein. Alternative:
Ribbon Daten -> Datenüberprüfen > Zulassen Liste. Dort auf Deine Mitarbeiterliste verweisen. Das ist kein automatisches Ergänzen, wenn man die ersten Buchstaben eingibt, aber Auswahl per Dropdown.

Kommentar von Bensemilia ,

Boa cool ich bin am Donnerstag wieder im Unternehmen dann teste ich es mal.

Werde Feedback geben! :)

Mit der andersherumlösung bin ich sehr zufrieden !

Danke im Voraus

Antwort
von Bensemilia, 30

Hey also ich habe mir das echt einfach vorgestellt, ich bin jetzt soweit gekommen, hab das Sub eingefügt und auf die entsprechenden Farbbeispiele gedrückt, wie erstelle ich denn jetzt ein Makro? 

Ich würde dich gerne persönlich kontaktieren? Gibt es da Möglichkeiten?  

Gruß Manuel 

Antwort
von maximilianus7, 33

eine etwas kürzere andersherumlösung zu 1.:

Dim sel As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
butext = "~Früh~Spät~...~"

If Target.Row >= 5 And Target.Row <= letzte_kalender_zeile And Target.Column >=5 Then
Set sel = Target
Exit Sub
End If

If InStr(butext, "~" & Target(1).Text & "~") Then sel.Interior.ColorIndex = Target.Interior.ColorIndex
End Sub

zu 2:

mit

Private Sub Worksheet_Change(ByVal Target As Range)

wäre auch das möglich: eine form mit dropdown-control definieren, mit target.text in der mitarbeitertabelle suchen, mit treffern dropdown füllen, mit auswahl target.text setzen.

Kommentar von Bensemilia ,

Hier weiß ich überhaupt nicht was ich tun soll :D? 

Weder mit der Andersherumlösung noch mit dem Drop Down Lösung.. Ich finde mich schwer im VBA zurecht. Kannst du es noch ausführlicher erklären? 

Kommentar von maximilianus7 ,

zu 1:

in der VBA entwicklungsumgebung siehst du (solltest du sehen) links oben den project-explorer. dort doppelklick auf den eintrag mit tabelle1. dann hast du rechts den VBA-editor, in den du dann den obigen code (der mit Private Sub Worksheet_Selection Change) einfügst.

butext noch um die anderen "button"-texte ergänzen. letzte_kalender_zeile mit der richtigen zeilennummer versehen (konnte es auf deinem bild nicht erkennen).

Worksheet_Selection Change ist eine sog. ereignisprozedur. in diesem falle wird sie angesprungen (gefeuert), wenn du in der tabelle1 (daher wichtig, wo sie prozedur definiert ist) irgendeine zelle oder zellbereich (range) selektierst. der bereich wird als parameter target mitgeteilt.

zu 2: erst mal 1 zum laufen bringen, dann ev. die frage getrennt neu stellen. ist eh nie gut 2 fragen auf einmal.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten