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

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

Wie muss ich den folgenden script ändern damit der button rot wird?

Der script ist:

// Read more button if ( apply_filters( PT_CV_PREFIX_ . 'field_content_readmore_enable', 1, $fargs['content'] ) ) { $text = apply_filters( PT_CV_PREFIX_ . 'field_content_readmore_text', __( 'mehr', PT_CV_DOMAIN ), $fargs['content'] ); $readmore .= self::_field_href( $oargs, $post, $text, PT_CV_PREFIX . 'readmore' . ' btn btn-success btn-sm' ); $readmore_btn .= '
' . $readmore;

Er stammt aus meinen wordpress theme. Momentan ist der button grün ich möchte aber das er rot wird. Der script ist in php soweit ich weiß! Danke!

...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

Javascript Eingabefeld: Meldung direkt am Feld

Hi. Schaut euch das Bild an, was ich beigefügt habe!

Wenn ich in das Feld

<input type="email" />

einfach irgendein Wort reinschreibe und dann auf den Absende Button (submit) klicke, wird mir sofort eine Meldung unter der Input-Box ausgegeben.

(Bitte geben sie eine Email-Adresse ein!).

Wie kann ich das ändern, oder selbst so eine Meldung ausgeben, wenn ich ein Input-Feld überprüfe?

*

...zur Frage

Twitch die Info box ändern?

Hätte da eine frage und zwar kann ich bei meinem twitch account irgendwie die Info box (info) nicht ändern bzw finde ich den button einfach nicht haha.

Wär gut wenn mir vielleicht jemand helfen könnte!

Danke ! Leah

...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?