Wie kann ich mit die Farbe eines Feldes in einer anderen Tabelle über einen Button ändern?

2 Antworten

Zeichne dir am besten ein Makro auf, mit dem du alle Schritte mal simulierst und alle Farben, die vorkommen können, zuweist.

Für die Hintergrundfarbe wird so etwas wie InteriorColor (o. ä.) benötigt werden.

Du solltest sogar Farben mit der Funktion RGB (rot, grün, blau) leicht selber mischen können.

Die getrennte Erfassung Monat / Tag über zwei Kombiboxen wäre eleganter mit dem DTPickup zu lösen (muss man idR noch zu den Steuerelementen dazufügen: Microsoft Date and Time Picker Control) Damit kannst Du jeweils in einem Feld Beginn bzw. Ende ermitteln. Das würde ich dann auch eher in eine UserForm packen, als in ein Tabellenblatt.

Das Färben selbst ist in VBA ja einfach

cells(x,y).interior.color=Vbred

nur als Beispiel. Für die angedachte Funktion muss Du allerdings einiges mehr tun, die relevanten Zellen ermitteln (Zeile gem. Name, Spalten nach dem Zeitraum der Abwesenheit, Farbe entsprechend der Auswahl).

Ich bräuchte da mal eine genauere Beschreibung, wie ich da jetzt vorgehen soll. Ich bin leider nicht so extrem vertraut mit der ganzen Materie. Wie füge ich denn z.B. den DTPickup zu den Steuerelementen hinzu? und wie werte ich das dann so aus, dass sich das ganze auf meinen Kalender auswirkt?

0
@LadieX

Ok, den DTPickup habe ich gefunden, jetzt brauch ich noch eine Box, in der ich eintragen kann, wer abwesend ist und eine in der eingetragen wird, warum man abwesend ist. Das "Warum" steht im Endeffekt ja nur für eine Farbe und das "Wer" gibt an, in welcher Zeile markiert werden soll. Wie verpacke ich diese Infos jetzt sauber in VBA.

0
@LadieX

Weißt Du wie man eine Userform in VBA anlegt? Sonst müssten wir da ziemlich weit vorne beginnen...

Bei der Anlage Userform ist i.d.R. die Werkzeugsammlung offen. Bei Rechtsklick gibt es die Möglichkeit weitere hinzuzufügen. Was Du benötigst nennt sich Microsoft Daten and Time Picker Control.

0
@Ninombre

Man kann das schrittweise verfeinern: Mir würde folgendes vorschweben:

2 DTPickup für Beginn und Ende
Combobox für den Mitarbeiter
Combobox für die Abwesenheit (alternativ wären Buttons denkbar)
Befehlsbutton um den Eintrag zu starten.

Dann brauchst Du ein Codeschnipsel um die Userform anzuzeigen und die Werte in den Comboboxen zu setzen. In dem einfachen Beispiel unterstelle ich mal, dass die Namen zwischen A2 und A10 stehen. Da lässt sich später noch eleganter lösen (also die Anzahl nicht fest zu setzen, sondern flexibel zu ermitteln). Es gibt im Beispiel erstmal nur zwei Abwesenheitsgründe.

Sub start()
UserForm1.ComboBox1.RowSource = "Tabelle1!A2:A10"
UserForm1.ComboBox2.AddItem "Urlaub"
UserForm1.ComboBox2.AddItem "Krank"
UserForm1.Show
End Sub
1
@Ninombre

Das wäre eine rudimentäre Funktion beim Klick auf den Button

Das Färben der Zellen selbst lässt sich sicher besser lösen als in der Schleife, muss fürs erste aber reichen. Die Funktion in der Form überklatscht sämtliche bisherige Zellfarben (bspw. Wochenenden, Feiertage bzw. schon vorhandene Abwesenheiten). Das wären noch weitere einzubauende Raffinessen und Plausibilitäten.

Private Sub CommandButton1_Click()
Application.EnableEvents = False

If DTPicker1 > DTPicker2 Then
MsgBox "Das Endedatum muss größer sein als das Startdatum"
Exit Sub
End If

If UserForm1.ComboBox1.Value = "" Then
MsgBox "Bitte einen Mitarbeiter auswählen"
Exit Sub
End If

If UserForm1.ComboBox2.Value = "" Then
MsgBox "Bitte einen Abwesenheitsgrund auswählen"
Exit Sub
End If

If UserForm1.ComboBox2.Value = "Krank" Then farbe = vbRed
If UserForm1.ComboBox2.Value = "Urlaub" Then farbe = vbBlue

'Zeile für den Mitarbeiter finden
For i = 2 To Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
If Tabelle1.Cells(i, 1).Value = UserForm1.ComboBox1.Value Then Exit For
Next
'Spalte für den Beginn finden                     
For j = 2 To 367
If Tabelle1.Cells(1, j).Value = UserForm1.DTPicker1.Value Then Exit For
Next

'Bis das Endedatum erreicht ist alle Zellen färben
While Tabelle1.Cells(1, j).Value <= UserForm1.DTPicker2.Value
Tabelle1.Cells(i, j).Interior.Color = farbe
j = j + 1
If j > 366 Then Exit Sub
Wend
                                       
End Sub

1
@Ninombre

Super, das hat mir schonmal sehr weitergeholfen :) Das ist auch fast das erste Mal, das ich irgendetwas mit VBA mache. Du müsstest mir den letzten Teil nochmal erklären, da wo die Zeile und Spalte, sowie Anfang und Ende der Markierung ermittelt wird.

Ich glaube da habe ich mich etwas unklar ausgedrückt... Jeder Monat hat ein eigenes Tabellenblatt, d.h. man müsste den Code so anpassen, dass er in quasi erst in den richtigen Monat springt und dann die Markierung vornimmt.

Die Kalendertabellen sind so aufgebaut: in der ersten Spalte stehen untereinander die Namen, in der ersten Zeile steht der Wochentag und in der Zeile darunter steht dann der Tag im Monat, einfach als Zahl.

0
@LadieX

In vereinfachter Form (der Urlaub muss monatsweise erfasst werden) und wenn die Tage einfach nur 1,2,3 sind (also kein echtes Datum) und in Zeile 2 stehen:

Private Sub CommandButton1_Click()
Application.EnableEvents = False

If DTPicker1 > DTPicker2 Then
MsgBox "Das Endedatum muss größer sein als das Startdatum"
Exit Sub
End If

If DTPicker1.Month <> DTPicker2.Month Then
MsgBox "Den Urlaub bitte monatsweise erfassen"
Exit Sub
End If

If UserForm1.ComboBox1.Value = "" Then
MsgBox "Bitte einen Mitarbeiter auswählen"
Exit Sub
End If

If UserForm1.ComboBox2.Value = "" Then
MsgBox "Bitte einen Abwesenheitsgrund auswählen"
Exit Sub
End If

If UserForm1.ComboBox2.Value = "Krank" Then farbe = vbRed
If UserForm1.ComboBox2.Value = "Urlaub" Then farbe = vbBlue

'Monat ermitteln
Select Case DTPicker1.Month
Case 1:  Set UP = Sheets("Januar")
Case 2:  Set UP = Sheets("Februar")
Case 3:  Set UP = Sheets("März")
Case 4:  Set UP = Sheets("April")
Case 5:  Set UP = Sheets("Mai")
Case 6:  Set UP = Sheets("Juni")
Case 7:  Set UP = Sheets("Juli")
Case 8:  Set UP = Sheets("August")
Case 9:  Set UP = Sheets("September")
Case 10:  Set UP = Sheets("Oktober")
Case 11:  Set UP = Sheets("November")
Case 12:  Set UP = Sheets("Dezember")
End Select
'Mitarbeiter ermitteln: in Spalte 1 nach unten suchen und den Inhalt der Zelle mit dem gewählten Mitarbeiter aus der Combobox
'abgleichen. Wenn der Name gefunden wurde, Suche abbrechen
For i = 2 To UP.Cells(Rows.Count, 1).End(xlUp).Row
If UP.Cells(i, 1).Value = UserForm1.ComboBox1.Value Then Exit For
Next
'Beginndatum suchen
For j = 2 To 32
If UP.Cells(2, j).Value = UserForm1.DTPicker1.Day Then Exit For
Next
'Ab dem Beginndatum alle Zellen einfärben bis das Endedatum erreicht ist
While UP.Cells(2, j).Value <= UserForm1.DTPicker2.Day
UP.Cells(i, j).Interior.Color = farbe
j = j + 1
If j > 32 Then Exit Sub
Wend
                                       
End Sub

Die Zuordnung des Tabellennamens (die select case) musst Du auf die tatsächlichen Namen noch anpassen.

Das gleiche gilt für das Bestücken der Combobox mit den Namen der Mitarbeitern. Das ist eine etwas heikle Sache mit unterschiedlichen Tabellenblättern, es darf da keine Abweichung mit den Schreibweisen oder der Anzahl der Einträge geben.

0

PHP Feld Speichern

Hallo zusammen,

Ich versuche ein TIK TAK TOE Spiel zu programmieren. Es soll so funktionieren dass wenn ich auf den Button X klicke soll ein X in das Feld kommen und umgekehrt mit O. Das funktioniert soweit, aber wenn ich eine zweiten Button anklicke verschwindet das X / O von der vorherigen Box. Mir wurde gesagt das ich das Feld speichern soll. Ich weiß aber nicht wie... es wäre super , wenn mir das jemand erklären und ein Beispiel an meinem Code Schnipsel machen könnte

...zur Frage

Kann man bei Excel die Farbe der bedingten Formatierung aus der Farbe einer anderen Zelle übernehmen?

Hallo zusammen,

ich habe über bedingte Formatierungen einen Projektplan erstellt, bei dem die Kalenderwochen eingefärbt werden wenn das Teilprojekt in der Kalenderwoche aktiv ist. Soweit so gut, ich würde mir die Farbe in der bedingten Formatierung aber gerne aus einer anderen Zelle holen.

MaW: In Zelle A3 steht das Teilprojekt, und die Zelle hat eine bestimmte Farbfüllung. Wenn die Füllung gelb ist, dann soll Excel bitte die Zellen A4-A56 auch gelb füllen, wenn in den entsprechenden Kalenderwochen das Teilprojekt aktiv ist.

Geht sowas, meintwegen auch VBA?

Würde mich Rückmeldungen und eventuelle Links sehr freuen

Gruß

Octonaut

...zur Frage

Excel wenn zelle von bis im tabellenblatt 2 farbe dann zelle von bis Tabellenblatt 1 gleiche Farbe

habe einen Jahres urlaubsplan unter Arbeitskollegen erstellt. Wo deren Urlaub von allem auf einem Kalender eingeplant wird ( Tabellenblatt 2 ) und auf ( Tabellenblatt 1 ) soll dann dem entsprechend in dem Monat für die jeweilige Person die Farbe mit übernehmen.

Quasi:

Excel wenn zelle von bis im tabellenblatt 2 farbe dann zelle von bis Tabellenblatt 1 gleiche Farbe

...zur Frage

1x im Monat haare färben?

Hallo ihr lieben :)! Ich habe mir vor ca 1 monat die haare dunkel gefärbt (meine haare sind von Natur aus Hellbraun) und jetzt ist die farbe etwas verblasst und sieht wieder sehr hell aus,weil ich im Urlaub war. da ich sie 'schokobraun' gefärbt hab,habe ich mich dazu entschieden sie jetzt 'Dunkelbraun' zu färben. Da mein freund fand,das mir die dunklen haare super stehen möchte ich ihn 'überraschen' und sie noch dunkler färben. Er ist noch 1 woche im Urlaub. Jetzt habe ich die Bedenken das mir die haare vielleicht ausfallen könnten oder sonst was. :) Könnt ihr mir vielleicht Tipps geben ? Ich färbe mit der haarfabe Olia von Garnier und bin sehr überzeugt!

...zur Frage

Kann man Micosoft Word einmal kaufen und zu zweit nutzen?

Wenn man sich dieses Microsoft Paket mit Word, Excel usw. holt, kann man es dann auf zwei Pc`s mit der gleichen IP Adresse benutzen? Ich meine ich habe mal gehört, das geht, solange es die selbe IP Adresse ist. Kann mir da jemand was genaueres sagen?

...zur Frage

Microsoft Office Paket günstig oder kostenlos ?

Hallo Leute kann mir jemand sagen wo ich möglichst günstig oder kostenlos eine Office Paket bekomme brauche das für die schule Würde mich über SINNVOLLE antworten freuen

...zur Frage

Was möchtest Du wissen?