Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Datenübernahme aus Uform in Kalenderblatt

Forumthread: Datenübernahme aus Uform in Kalenderblatt

Datenübernahme aus Uform in Kalenderblatt
07.05.2025 12:43:56
Horst Gernert
Bräuchte mal euer Wissen
Der VBA Code läuft ohne Fehler durch , es wird aber nichts ins Kalenderblatt übertragen
kann mir da jemand helfen. In der Tabelle gibt es ein Button um Urlaub einzutragen
https://www.herber.de/bbs/user/177358.xlsm

'Urlaub in Kalender eintragen


Private Sub CommandButton2_Click()
Dim str_mitarbeiter As String
Dim dat_von As Date
Dim dat_bis As Date
Dim str_kuerzel As String
Dim obj_wks_ziel As Worksheet
Dim lng_spalte_von As Long
Dim lng_spalte_bis As Long
Dim rng_fund As Range
Dim lng_zeile As Long
Dim lng_Spalte As Long
Dim lng_zaehler As Long

str_mitarbeiter = Me.ComboBox1
dat_von = Me.TextBox1
dat_bis = Me.TextBox2
str_kuerzel = Me.ListBox1
Set obj_wks_ziel = ThisWorkbook.Worksheets("Personalplaner")

With obj_wks_ziel
For lng_zaehler = 9 To .Rows.Count
If .Cells(lng_zaehler, 3) = str_mitarbeiter Then
lng_zeile = lng_zaehler
End If
Next
Set rng_fund = .Rows(1).Find(dat_von)
If Not rng_fund Is Nothing Then
lng_spalte_von = rng_fund.Column
End If
Set rng_fund = .Rows(1).Find(dat_bis)
If Not rng_fund Is Nothing Then
lng_spalte_bis = rng_fund.Column
End If
For lng_Spalte = lng_spalte_von To lng_spalte_bis
If Weekday(.Cells(2, lng_Spalte)) > 6 And Weekday(.Cells(2, lng_Spalte)) > 7 Then
.Cells(lng_zeile, lng_Spalte) = str_kuerzel
End If
Next
End With
'Unload Me
End Sub


'Urlaub von: --> Format


Private Sub TextBox1_AfterUpdate()

TextBox1 = Format(TextBox1, "DD.MM.YYYY")

End Sub



'Urlaub bis: --> Format

Private Sub TextBox2_Afterupdate()

TextBox2 = Format(TextBox2, "DD.MM.YYYY")

End Sub


Private Sub UserForm_Initialize()


'Mitarbeiter Tabelle

With Worksheets("Personalplaner").Activate
Abwesendheit.ComboBox1.RowSource = "NZ9:NZ38"

'Kürzel laden

Abwesendheit.ListBox1.RowSource = "NS3:NT10"

End With

With ComboBox1
.ListIndex = 0
End With


End Sub


Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 13:01:32
velo
Hallo Horst,

habe deinen Code kurz überflogen. Mir ist aufgefallen, dass du das "lesen" aus den UserForm Elementen überarbeiten musst:

Aus...
str_mitarbeiter = Me.ComboBox1

dat_von = Me.TextBox1
dat_bis = Me.TextBox2
str_kuerzel = Me.ListBox1

wird...
str_mitarbeiter = Me.ComboBox1.Value 'oder .Text

dat_von = Me.TextBox1.Value 'muss in der Regel automatisch ein Datum erkennen, wenn nicht bau eine kurze Fehlerbehandlung ein --> if isdate() ...
dat_bis = Me.TextBox2.Value
str_kuerzel = Me.ListBox1.Value 'oder Text


Wie gesagt, ist nur kurz überflogen, aber vielleicht ist hiermit der Fehler schon gelöst.

VG
velo
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 13:25:23
daniel
Hi
Datum suchen mit .FIND ist schwierig
Tausche die Suchmethode. Suche den Namen mit .FIND.

Die Spalte für das Datum würde ich hier nicht suchen, sondern berechnen.
Du hast einen regulären Kalender (vollständig, sortiert) mit einem Tag pro Spalte.
also kannst du die Spalte für ein Datum berechnen nach diesem Schema: Spalte = Datum - erstes_Datum + Spaltennummer_erste_Kalenderspalte.
das wäre hier die einfachste Methode.

Gruß Daniel
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 14:23:59
Piet
Hallo

ich weiss nicht wie Daniel die Zelle berechnet, meine Methode ist mit 2 For Next Schleifen das Datum suchen.
Dazu solltest du noch die Variable "lastSpalte" definieren, und die LastSpalte ermitteln.

Die kannst du auch als feste Zahl angeben, denn es müssten ja 365/366 Tage sein plus die ersten Spalten für Name, ID usw.
Bei For Next kannst du beide Werte mit CDate in ein Datum formatieren lassen. Damit sollte es besser klappen als Find.
PS ~5 in der 1. For Next Schleife ist die 1. Spalte wo ein Datum steht, ggf. ändern!

mfg Piet

    lastSpalte = Cells(1, Columns.Count).End(xlToLeft).Column

For lng_Spalte_von = 5 To lastSpalte 'oder ~370 als feste Zahl, max Spalten
If CDate(.Cells(1, lng_Spalte_von)) = CDate(Me.TextBox1) Then Exit For
Next
For lng_Spalte_bis = lng_Spalte_von To lastSpalte
If CDate(.Cells(1, lng_Spalte_bis)) = CDate(Me.TextBox2) Then Exit For
Next
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 17:37:35
Alwin Weisangler
Hallo Horst,

noch eine andere Möglichkeit via Array:


'Urlaub in Kalender eintragen
Private Sub CommandButton2_Click()
Dim arr(), i&, sU As Variant, zMA As Variant, dateS As Date, dateE As Date
dateS = CDate(TextBox1)
dateE = CDate(TextBox2)
sU = Application.Match(CLng(dateS), Tabelle1.Rows(9), 0)
zMA = Application.Match(ComboBox1.Value, Tabelle1.Columns(3), 0)
ReDim arr(1 To 1, 1 To dateE - dateS + 1)
For i = LBound(arr, 2) To UBound(arr, 2)
If WorksheetFunction.Weekday(dateS + i - 1, 2) 6 And IsError(Application.Match(CLng(dateS + i - 1), Tabelle2.Range("rng_FTage"), 0)) Then
arr(1, i) = ListBox1.List(ListBox1.ListIndex, 0)
End If
Next i
Tabelle1.Cells(zMA, sU).Resize(1, UBound(arr, 2)) = arr
End Sub


Gruß Uwe
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
08.05.2025 13:53:03
Marc
Nur weil er keinen Fehler bringt, heißt es nicht, das er Fehlerlos ist..

Es kann sein das er irgendwo abbricht, ohne das es zu Einer exception kommt.

Wenn sowas passiert empfehle ich immer, in logischen Abschnitten des Codes eine MsgBox einzufügen mit einem Text oder Zahl, um zu wissen, bis zu welcher Stelle geht der Code und vor welcher MsgBox bricht er ab.
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 14:45:39
Horst Gernert
Hi Piet ,

läuft super danke, wie nehme ich jetzt die Wochenenden raus, da die ja kein Arbeitstag sind
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 13:29:52
Horst Gernert
Hallo Daniel,
wie müsste ich das dann im Code umsetzten
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 13:36:55
Horst Gernert
Hallo Daniel ,
wie müsste ich es dann im Code umsetzten
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 14:46:30
daniel
so:

Private Sub CommandButton2_Click()

Dim str_mitarbeiter As String
Dim dat_von As Date
Dim dat_bis As Date
Dim str_kuerzel As String
Dim obj_wks_ziel As Worksheet
Dim lng_spalte_von As Long
Dim lng_spalte_bis As Long
Dim rng_fund As Range
Dim lng_zeile As Long
Dim lng_Spalte As Long
Dim lng_zaehler As Long

str_mitarbeiter = Me.ComboBox1
dat_von = Me.TextBox1
dat_bis = Me.TextBox2
str_kuerzel = Me.ListBox1
Set obj_wks_ziel = ThisWorkbook.Worksheets("Personalplaner")
With obj_wks_ziel
set rng_found = .columns(3).find(what:=str_mitarbeiter, lookat:=xlwhole, lookin:=xlvalues)
if not rng_found is nothing then lng_zeile = rng_found.row
lng_spalte_von = Clng(dat_von) - .Range("L1").value + .Range("L1").column
lng_spalte_bis = Clng(dat_bis) - .Range("L1").value +.Range("L1").Column
For lng_Spalte = lng_spalte_von To lng_spalte_bis
If Weekday(.Cells(2, lng_Spalte)) > 6 And Weekday(.Cells(2, lng_Spalte)) > 7 Then
.Cells(lng_zeile, lng_Spalte) = str_kuerzel
End If
Next
End With
End Sub
Anzeige
AW: Datenübernahme aus Uform in Kalenderblatt
07.05.2025 13:15:19
Horst Gernert
Hallo Velo, das war es leider nicht, durch drücken des Button läuft der Code ohne Fehler durch,
es wird aber in der Kalendertabelle garnicht angezeigt.

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige