Über Userform die Suchposition durch eine Variable bestimmen

Hallo zusammen,

ich habe eine Userform für einen Urlaubsplan erstellt.

In dem Urlaubsplan stehen die Mitarbeiter in einer Spalte und die Monate untereinander:

Januar1 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21
Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

Februar	01	02	03	04	05	06	07	08	09	10	11	12	13	14	15	16	17	18	19	

Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

Bei der Userform werden die Monate und die Mitarbeiter per Combobox und Listbox festgelegt.

Das ist schön. Für wen auch immer.

Es tut mir leid, ich habe den falschen Knopf gedrückt. Hier der ganze Beitrag:

Hallo zusammen,

ich habe eine Userform für einen Urlaubsplan erstellt.

In dem Urlaubsplan stehen die Mitarbeiter in einer Spalte und die Monate untereinander:

Januar 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

Februar	01	02	03	04	05	06	07	08	09	10	11	12	13	14	15	16	17	18	19	

Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

So sieht das Ganze aus. Die Monate und Mitarbeiter lasse ich durch eine Combobox auswählen und Start und Ende des Urlaubs über zwei Listboxen. Nun sollen die Userformeingaben automatisch die Tage im Kalender markieren. Das klappt auch ganz gut. Nur leider bekomme ich die Programmierung für die Mitarbeiter nicht ganz hin. Es wird immer nur im Januar markiert. Ich weiß nicht, wie ich dem Programm sagen soll, dass es erst in der Zeile, in welcher der ausgewählt Monat steht, anfangen soll, den Mitarbeiternamen zu suchen.

Ich hoffe, Ihr könnt mir helfen.

Hier mein bisheriger Code:

Private Sub CommandButton1_Click()

Dim Monat as String
Dim Start As Integer
Dim Ende As Integer
Dim Mt, Mitarbeiter, start_suche, ende_suche As Range
Start = Me.TextBox1.Value
Ende = Me.TextBox2.Value

Monat = Me.ComboBox2.Value

Set Mt = Tabelle2.Columns(2).Find(what:=Monat, lookat:=xlWhole)

Set start_suche = Tabelle2.Rows(Mt.Row).Find(what:=Start, lookat:=xlWhole)
Set ende_suche = Tabelle2.Rows(Mt.Row).Find(what:=Ende, lookat:=xlWhole)
Set Mitarbeiter = Tabelle2.Columns(1).Find(what:=Me.ComboBox1.Value, lookat:=xlWhole)

If Not start_suche Is Nothing Then
Tabelle2.Range(Tabelle2.Cells(Mitarbeiter.Row, start_suche.Column), Tabelle2.Cells(Mitarbeiter.Row, ende_suche.Column)).Interior.ColorIndex = 45

End If

    TextBox1.Value = ""
    TextBox2.Value = ""

End Sub

LG Martina

Hallo zusammen,

kann mir keiner zu diesem Thema eine Antwort bzw. Hilfe geben?

Ich habe eine Userform für einen Urlaubsplan erstellt.

In dem Urlaubsplan stehen die Mitarbeiter in einer Spalte und die Monate untereinander:

Januar 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

Februar	01	02	03	04	05	06	07	08	09	10	11	12	13	14	15	16	17	18	19	

Mitarbeiter1
Mitarbeiter2
Mitarbeiter3
Mitarbeiter4
Mitarbeiter5
Mitarbeiter6
Mitarbeiter7
Mitarbeiter8
Mitarbeiter9
Mitarbeiter10
Mitarbeiter11
Mitarbeiter12
Mitarbeiter13
Mitarbeiter14
Mitarbeiter15

So sieht das Ganze aus. Die Monate und Mitarbeiter lasse ich durch eine Combobox auswählen und Start und Ende des Urlaubs über zwei Listboxen. Nun sollen die Userformeingaben automatisch die Tage im Kalender markieren. Das klappt auch ganz gut. Nur leider bekomme ich die Programmierung für die Mitarbeiter nicht ganz hin. Es wird immer nur im Januar markiert. Ich weiß nicht, wie ich dem Programm sagen soll, dass es erst in der Zeile, in welcher der ausgewählt Monat steht, anfangen soll, den Mitarbeiternamen zu suchen.

Ich hoffe, Ihr könnt mir helfen.

Hier mein bisheriger Code:

Private Sub CommandButton1_Click()

Dim Monat as String
Dim Start As Integer
Dim Ende As Integer
Dim Mt, Mitarbeiter, start_suche, ende_suche As Range
Start = Me.TextBox1.Value
Ende = Me.TextBox2.Value

Monat = Me.ComboBox2.Value

Set Mt = Tabelle2.Columns(2).Find(what:=Monat, lookat:=xlWhole)

Set start_suche = Tabelle2.Rows(Mt.Row).Find(what:=Start, lookat:=xlWhole)
Set ende_suche = Tabelle2.Rows(Mt.Row).Find(what:=Ende, lookat:=xlWhole)
Set Mitarbeiter = Tabelle2.Columns(1).Find(what:=Me.ComboBox1.Value, lookat:=xlWhole)

If Not start_suche Is Nothing Then
Tabelle2.Range(Tabelle2.Cells(Mitarbeiter.Row, start_suche.Column), Tabelle2.Cells(Mitarbeiter.Row, ende_suche.Column)).Interior.ColorIndex = 45

End If

    TextBox1.Value = ""
    TextBox2.Value = ""

End Sub

LG Martina

Hast du dir mal angeschaut, wie man bei einem „Range“ auf die einzelnen Teile und damit auch auf die enthaltenen Arrays zugreift?

Nein, habe ich nicht. Wo kann ich das nachlesen?

Welche Programmierumgebung verwendest du denn?

VBA, die Userform ist in Ecxel.

Dann könnte der Link
https://docs.microsoft.com/de-de/office/vba/api/excel.range(object)
hilfreich sein.

So gut bin ich in VBA noch nicht. Wie bekomme ich das in meinen Code?

Rechts oben in den Code-Auschnitt-Fenstern gibt es „kopieren“. Und dann halt an passender Stelle einfügen. Und dann halt passend editieren - die Variablen heißen bei dir natürlich ganz anders als im Beispiel.

wenn ich mir das so anschaue, dann gibt es kein Beispiel, für eine Range beginnend ab einer bestimmten Zeile und Spalte. Ic muss das ganze ja noch in die find Methode bekommen und dann
über die Range in dem Excelsheet markieren lassen.

Ich will dir nicht zu nahe treten, aber wäre es nicht sinnvoll, wenn du dir mal ein nettes Buch oder einen Onlinekurs zu VBA unter Excel zu Gemüte führt, um die Grundlagen näher kennen zu lernen? Objektorientierte Programmierung ist ja nun nicht, was man mal so eben nebenbei macht.

Das Programm soll doch hinterher auch jemand nutzen, und wenn du gar nicht weißt, was bei einer nicht vorgesehenen Eingabe passieren kann kannst du es auch nicht „idiotensicher“ programmieren. Was ist zum Beispiel, wenn sich jemand vertippt und dann mal eben die Daten der letzten zwei Jahre oder die des falschen Mitarbeiters überschreibt?

Da hast du recht. Gott sei Dank, ist immer nur ein Jahr in der Datei, aber die markierten Urlaubstage überschreiben, könnte passieren. Ich werde es mit einem Buch versuchen. Dir aber vielen Dank für Deine Hilfe und Geduld.

Moin,

das wird Quark wegen eines Syntaxfehlers: ende_suche ist ein Range, die anderen Variablen sind wasweißdennich, irgendwelche Defaults halt. So wird ein Schuh draus:

Dim Mt As [DeinTyp], Mitarbeiter As [DeinTyp], start_suche As Range, ende_suche As Range

Und als erste Zeile gehört

Option Explicit

ins Modul, damit wird sichergestellt, dass nicht deklarierte Variablen gemeldet werden.

Gruß
Ralf

1 Like

Vielen Dank für die Hilfe, ich probiere es morgen gleich aus.