Hallo Zusammen,
habe kaum Ahnung von VBA. Habe mich von Gemini beraten lassen hat soweit zu 50% geklappt. Den Rest bekommt Gemini nicht hin, oder ich schaffe das nicht.
Zur Aufgabenstellung:
Möchte aus einer Excel Tabele den tagesaktuellen Status von Mitarbeitern auslesen und in einer UserForm Darstellen. Als eine Übersicht.
Habe mit Erfolg die UserForm erstellt die dann auf Konpfdruck angezeigt wird, aber ohne den Status.
Folgende Daten sollen gefunden und ausgegeben werden. K=Krank=rot, 1=Urlaub=Grün,M=Überstunden=Magenta, o=Anwesend=Weiß. Es soll dann der Name des Mitarbeiters in der dementsprechenden Farbe als Hintergrund auf einer Karte in der UserForm dargestellt werden.
Die Daten (K,1,M,o) befinden sich in AW2:OX31
Datumszeile: AW2:OX2 für den aktuellen Tag
Die Mitarbeiter stehen inD7:D31
Die UserForm (Dachboard enthält Frames die MA1-MA25 heißen. In den Frames sollen dann jeweils zwei Label (Beschriftungsfeld) mit lblName und lblStatus sein. Aktuell nur in MA1 zum testen. Soweit hat das mit Gemini geklappt. Nur die Daten werden nicht gezogen und angezeigt.
Hier der Code in UserForm (Dashboard)
Public Sub InitializeDashboard()
Dim aktuellesDatum As Date
Dim spaltenIndex As Long
Dim mitarbeiterName As String
Dim mitarbeiterStatus As String
Dim lblName As MSForms.Label
Dim lblStatus As MSForms.Label
aktuellesDatum = Date
spaltenIndex = 0
'Spaltenindex finden
For i = 1 To Worksheets("2025").Range("AW2:OX2").Columns.Count
If Worksheets("2025").Cells(2, 48 + i - 1).Value = aktuellesDatum Then
spaltenIndex = i
Exit For
End If
Next i
If spaltenIndex = 0 Then
MsgBox "Keine Daten für das aktuelle Datum gefunden."
Exit Sub
End If
'Mitarbeitername und -status auslesen (für MA1)
mitarbeiterName = Worksheets("2025").Cells(7, 4).Value 'Name Mitarbeiter
Debug.Print "Spaltenindex: " & spaltenIndex
Debug.Print "Mitarbeiterstatus: " & mitarbeiterStatus
mitarbeiterStatus = Worksheets("2025").Cells(7, 47 + spaltenIndex).Value
'Labels in Frame MA1 zuweisen
Set lblName = Me.Controls("MA1").Controls("lblName") 'Annahme: lblName für Name
Debug.Print "lblName: " & lblName.Name
Debug.Print "lblStatus: " & lblStatus.Name
Debug.Print "Mitarbeitername: " & mitarbeiterName
lblName.Caption = mitarbeiterName
Set lblStatus = Me.Controls("MA1").Controls("lblStatus") 'Annahme: lblStatus für Status
Debug.Print "lblName: " & lblName.Name
Debug.Print "lblStatus: " & lblStatus.Name
lblStatus.Caption = mitarbeiterStatus
'Farbcode für Status
Select Case mitarbeiterStatus
Case "K"
lblStatus.BackColor = vbRed
Case "O"
lblStatus.BackColor = vbWhite
Case "M"
lblStatus.BackColor = vbMagenta
Case "1"
lblStatus.BackColor = vbGreen
End Select
End Sub
Private Sub UserForm_Click()
End Sub
Mit dem Code soll dann das Dashboard gestartet werden, was auch funktioniert.
Sub DashboardAnzeigen()
Dim Dashboard As Dashboard
Set Dashboard = New Dashboard
Dashboard.Show
Dashboard.Top = Application.Top + (Application.Height - Dashboard.Height) / 2
Dashboard.Left = Application.Left + (Application.Width - Dashboard.Width) / 2
Dashboard.InitializeDashboard
End Sub
so, jetzt an die Experten, was ist hier falsch oder sollte anderst gemacht werden. Ist der Code richtig, den mir Gemini erstellt hat??
Könntet Ihr bitte mal drüber schauen.
Schon mal vielen Dank im Voraus
|