Wie formatiere bzw. programmiere ich in Excel Buttons?

Schihtplan  - (programmieren, Microsoft Excel)

3 Antworten

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 

 - (programmieren, Microsoft Excel)

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.


Bensemilia 
Beitragsersteller
 15.03.2016, 22:23

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

0
Bensemilia 
Beitragsersteller
 15.03.2016, 18:47

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

0
Ninombre  15.03.2016, 21:18
@Bensemilia

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.

0

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.


Bensemilia 
Beitragsersteller
 17.03.2016, 13:04

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? 

0
maximilianus7  17.03.2016, 20:15
@Bensemilia

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.

0