VBA Felder in verschiedenen Tabellenblättern färbe

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: VBA Felder in verschiedenen Tabellenblättern färbe
von: Ole Steinbrueck
Geschrieben am: 03.11.2015 15:06:08

Hi, ich habe folgendens Problem, ich habe einen Urlaubsplaner erstellt, dabei hat jeder Monat ein eigenes Tabellenblatt und es gibt eine erste Seite, auf der man per Button zu bestimmten Tabellenblättern springen kann.
Für die Planung soll jeder Mitarbeiter die entsprechenden Felder in der Tabelle für den jeweiligen Monat farbig markieren.
Ich habe soweit alles fertig und bin jetzt dabei ein UserForm zu erstellen, in welchem man auswählen kann, wann man abwesend ist, wer abwesend ist und welchen Grund dies hat.
Der Grund gibt die Farbe an, mit welcher markiert wird.
Das UserForm funktioniert auch, bis auf das färben der Felder.
Ich bräuchte also einen Code, der die DTPicker für das Datum auswertet, dann in das passende Tabellenblatt springt und dort nach dem jeweiligen Mitarbeiter sucht um dann die Felder (Tage z.B. 1-15) farbig markiert.
So sieht mein Code bis jetzt aus:

Private Sub UserForm_Initialize()
ComboBox2.AddItem "Urlaub"
ComboBox2.AddItem "GLZ"
ComboBox2.AddItem "Abwesenheit"
ComboBox1.RowSource = "Tabelle1!A1:A5"
End Sub
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 = "Abwesenheit" Then farbe = vbGreen
If UserForm1.ComboBox2.Value = "Urlaub" Then farbe = vbBlue
If UserForm1.ComboBox2.Value = "GLZ" Then farbe = vbYellow
Ich habe auch mal die komplette Datei hochgeladen: https://www.herber.de/bbs/user/101213.xlsm
Vielen Dank im Voraus.

Bild

Betrifft: Du musst deine Datei nochmals hochladen, ...
von: Luc:-?
Geschrieben am: 03.11.2015 22:50:06
…Ole,
denn sie ist beim 1.Mal anscheinend verloren gegangen. Das passiert leider mitunter.
Ansonsten kannst du die 3 letzten CodeZeilen auch so schreiben …

With UserForm1.ComboBox2
    farbe = Switch(.Value = "Abwesenheit", vbGreen, .Value = "Urlaub", vbBlue, _
                   .Value = "GLZ", vbYellow)
End With
…oder so …
Select Case UserForm1.ComboBox2.Value
    Case "Abwesenheit": farbe = vbGreen
    Case "Urlaub": farbe = vbBlue
    Case "GLZ": farbe = vbYellow
End Select
Kleiner Tipp: Wenn du die HTML-Pre-Tags nicht benutzt, solltest du eine gepostete Prozedur immer mit End … abschließen, sonst stellt die ForumsSoftware alles, was an Text nach der letzten CodeZeile kommt, als dem PgmCode zugehörig dar. Das könnte ggf auch Probleme beim AWen verursachen.
Gruß, Luc :-?

Besser informiert mit …

Bild

Betrifft: AW: Du musst deine Datei nochmals hochladen, ...
von: Ole Steinbrueck
Geschrieben am: 04.11.2015 08:14:27
Ich habe die Datei nochmal hochgeladen: https://www.herber.de/bbs/user/101235.xlsm
Vielen Dank schonmal :) Wie bekomme ich das denn jetzt hin, dass das Programm die DTPicker ausliest und dann in das entsprechende Tabellenblatt springt und dort nach dem Mitarbeiter aus der Combobox1 sucht und dann die Felder für den Zeitraum aus den DTPickern mit der Farbe für den, in Combobox2 ausgewählten Grund, ausfüllt?

Bild

Betrifft: Du musst deine Datei nochmals hochladen
von: Thomas
Geschrieben am: 04.11.2015 17:18:36
Hallo Luc :-?
da ich so etwas auch benötigen könnte habe ich mal dein Vorschlag ausprobiert.
Der Code sieht jetzt so aus ( unten) aber die betroffenen felder möchten sich einfach nicht Färben.
Mache ich etwas falsch?
liebe grüsse thomas

Private Sub UserForm_Initialize()
ComboBox2.AddItem "Urlaub"
ComboBox2.AddItem "GLZ"
ComboBox2.AddItem "Abwesenheit"
ComboBox1.RowSource = "Tabelle1!A1:A5"
End Sub
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
With UserForm1.ComboBox2
    farbe = Switch(.Value = "Abwesenheit", vbGreen, .Value = "Urlaub", vbBlue, _
                   .Value = "GLZ", vbYellow)
End With
                                        
End Sub


Bild

Betrifft: 'farbe' kann nur eine Long-Variable sein, die ...
von: Luc:-?
Geschrieben am: 04.11.2015 18:28:20
…nur den Farbwert aufnimmt, Thomas,
und dann noch der entsprd Eigenschaft des Objekts zugewiesen wdn muss, das diese Farbe annehmen soll.
Ich ging davon aus, dass Ole das weiß, zumal er ja einen unvollständigen Code gepostet hatte.
Gruß, Luc :-?

Bild

Betrifft: AW: 'farbe' kann nur eine Long-Variable sein, die ...
von: Ole Steinbrück
Geschrieben am: 04.11.2015 19:21:34
Ich weiß leider nur sehr wenig davon, ich habe den Code unvollständig gepostet, weil ich nicht weiter gekommen bin damit :/
Ich habe keine Ahnung, wie ich weitermachen soll, deshalb habe ich gefragt, wie das gehen kann.

Bild

Betrifft: Stimmt, erinnere mich, ...
von: Luc:-?
Geschrieben am: 04.11.2015 20:47:03
…Ole;
allerdings ist das, was du bisher pgmmiert hast, ziemlich wenig, obwohl es massenhaft Bspp für Abwesenheitskalender hier (im Archiv) und anderswo geben dürfte. Muss denn immer wieder das Rad neu erfunden wdn? Wenn du etwas Eigenes willst, kannst du dich zumindest an den anderen orientieren.
Ansonsten musst du warten, habe zZ noch Anderes zu tun.
Luc :-?

Bild

Betrifft: Falls ihr noch Bedarf habt, ginge mal simpel ...
von: Luc:-?
Geschrieben am: 08.11.2015 04:21:44
…das:

Private Sub CommandButton1_Click()
    Const adMABer$ = "A3:A7"
    Dim farbe As Long, Datum(1) As Date, Marb As String, _
        relMABer As Range, aWs As Worksheet
    On Error GoTo ex
    Application.EnableEvents = False
    Set aWs = ActiveSheet
    If DTPicker1 > DTPicker2 Then
        MsgBox "Das Endedatum muss größer sein als das Startdatum!", _
               vbExclamation: GoTo ex
    Else: Datum(0) = CDate(DTPicker1): Datum(1) = CDate(DTPicker2)
        If Month(Datum(0)) <> Month(Datum(1)) Then _
            MsgBox "Das Endedatum muss im gleichen Monat liegen!", _
                   vbExclamation: GoTo ex
    End If
    If UserForm1.ComboBox1.Value = "" Then
        MsgBox "Bitte einen Mitarbeiter auswählen": Exit Sub
    Else: Marb = UserForm1.ComboBox1.Value
    End If
    Select Case UserForm1.ComboBox2.Value
        Case "": MsgBox "Bitte einen Abwesenheitsgrund auswählen!", _
                        vbExclamation: GoTo ex
        Case "Abwesenheit": farbe = vbGreen
        Case "Urlaub":      farbe = vbBlue
        Case "GLZ":         farbe = vbYellow
    End Select
    Set relMABer = aWs.Range(adMABer)
    Set relMABer = relMABer.Cells(WorksheetFunction.Match(Marb, _
                   relMABer, 0)).EntireRow
    Set relMABer = aWs.Range(relMABer.Cells(1, Day(Datum(0)) + 1), _
                   relMABer.Cells(1, Day(Datum(1)) + 1))
    relMABer.Interior.Color = farbe
ex: Application.EnableEvents = True
    UserForm1.Hide: Set aWs = Nothing: Set relMABer = Nothing
    If CBool(Err.Number) Then _
        MsgBox Err.Description, vbCritical, "Fehler: " & Err.Number
End Sub
Gruß, Luc :-?

Bild

Betrifft: AW: Falls ihr noch Bedarf habt, ginge mal simpel ...
von: Thomas
Geschrieben am: 08.11.2015 13:15:04
Hallo Luc:-?,
eigentlich hätte ich schon eine Verwendung dafür. Zur Zeit bin ich noch am testen was man als alternative für den DTPicker ( müsste ich immer nachinstallieren) hätte. Jedoch habe ich noch kein erfolg gehabt.
Ich habe schon mit Textfeldern probiert, versucht es in eine Zelle auszulagern und und.
Wenn ich was gefunden habe sage ich noch bescheid.
liebe grüsse thomas

Bild

Betrifft: Für d.DTPicker fühle ich mich nicht zuständig, ...
von: Luc:-?
Geschrieben am: 08.11.2015 17:55:48
…Thomas,
da müsstest du Ole, in seiner Datei fktioniert er, o.A. fragen. ;-)
Gruß, Luc :-?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA Felder in verschiedenen Tabellenblättern färbe"