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

Forumthread: Excel VBA/Datum Problem

Excel VBA/Datum Problem
11.02.2020 13:47:39
Heinz
Hallo,
ich sitze für die Arbeit an einer Dynamischen Tabelle wo Mitarbeiter Ihre Stunden aufschreiben.
Dies erfolg über eine VBA-Eingabemaske (Userform) mit Datum,Tätigkeit und Stunden etc.
Wählt man nun das Datum mit Hilfe der Combobox aus und überträgt die eingegebenen Werte in ein neues Tabellenblatt
wird das Datum nicht richtig erkannt.
- Der Datepicker funktioniert im Firmennetzwerk nicht mehr ich muss es also anders lösen.
Momentan habe ich es wie folgt:
Combobox um Datum auszuwählen:

Private Sub BoxDatum_Click()
BoxDatum.Value = CDate(BoxDatum.Value)
End Sub

Private Sub Button_Take_Click()
'Eingabe der Schaltflaechen in die Arbeitsmappe übernehmen'
'wenn das Datumsfeld leer ist wird "Kein Datum" in die Tabelle übernommen
If BoxDatum.Value = "" Then BoxDatum.Value = "Kein Datum"
Dim last As Integer
'Im Folgenden wird festgelegt, wo die eingegebenen Daten abgelegt werden sollen'
last = Tabelle3.Cells(Rows.Count, 1).End(xlUp).Row + 1
Tabelle3.Cells(last, 1).Value = Instandhaltungsaufschreibung.BoxDatum.Value
Tabelle3.Cells(last, 2).Value = Instandhaltungsaufschreibung.Box1.Value
Tabelle3.Cells(last, 4).Value = Instandhaltungsaufschreibung.Box5.Value
Tabelle3.Cells(last, 6).Value = Instandhaltungsaufschreibung.Text_Dauer.Value
Tabelle3.Cells(last, 10).Value = Instandhaltungsaufschreibung.ListBox1.Value
Tabelle3.Cells(last, 11).Value = Instandhaltungsaufschreibung.ListBox2.Value
Tabelle3.Cells(last, 12).Value = Instandhaltungsaufschreibung.Text_Frei.Value
'Einordnen der Kategorie, abh. davon welcher Reiter in der Eingabemaske ausgewählt wird'
If TabStrip1.Value = 0 Then Tabelle3.Cells(last, 9) = "Mechanik"
If TabStrip1.Value = 1 Then Tabelle3.Cells(last, 9) = "Elektro"
If TabStrip1.Value = 2 Then Tabelle3.Cells(last, 9) = "Allgemeines/Büro"
If TabStrip1.Value = 3 Then Tabelle3.Cells(last, 9) = "Gebäude"
'Check Box-Abfragen: Wenn das Kontrollkästchen aktiviert ist, dann steht in der Tabelle "Ja",   _
_
ansonsten "Nein" '
If Check1.Value = True Then Tabelle3.Cells(last, 5) = "Ja"
If Check1.Value = False Then Tabelle3.Cells(last, 5) = "Nein"
If Check2.Value = True Then Tabelle3.Cells(last, 8) = "Ja"
If Check2.Value = False Then Tabelle3.Cells(last, 8) = "Nein"
Unload Instandhaltungsaufschreibung
End Sub
Private Sub UserForm_Initialize()
'Für die beiden Boxen am Anfang werden die Daten eingelesen'
BoxDatum = Date
Box1.RowSource = "Maschinen!A2:A75"
BoxDatum.RowSource = "Daten_Namen_Kategorie_Datum!E2:E368"
Box5.RowSource = "Daten_Namen_Kategorie_Datum!A2:A9"
'Checkbox für Abfrage, ob mit mehreren gearbeitet wurde'
Check1.Value = False
Check2.Value = False
'Im Folgenden werden die ListBoxen 1 und 2 beim Ausführen der UserForm mit Daten aus dem  _
Tabellenblatt Kategorien gefüllt'
'Der Bereich der Boxen kann durch Bearbeitung der Zeilennummer erweitert werden. Wenn der  _
Nutzer die Kategorien erweitern möchte, muss er nur die  Bezeichnung eintragen'
'ListBox1'
ListBox1.RowSource = "Kategorien!A2:A23"
ListBox2.RowSource = "Kategorien!E2:E23"
End Sub

Über ein weiteres Tabellenblatt (Daten_Namen_Kategorie_Datum) werden die verschiedenen Daten eingespeist, diese sind alle richtig formatiert.
Ich habe schon gefühlt alles ausprobiert, jedoch muss man immer erst mit Doppelklick das eingetragene datum anwählen und mit ENTER bestätigen, sodass es von Excel rechtsbündig als Datum angezeigt wird.
Wichtig ist dies, weil wir mit einem Spaltenfilter auf die verschiedenen Monate zugreifen müssen. Problem ist eben die dynamische Tabelle, nach jedem Eintrag wird eine neue Zeile erstellt. Ich habe es auch schon mit dem Multiplizieren von Zelle bzw Spalte mit 1 versucht aber sobald man alles formatiert hat und einen neuen Eintrag tätigt ist das neue Datum wieder nicht richtig formatiert.
Der wirklich einzige Weg den ich momentan habe ist der Doppelklick...und das ist ziemlich umständlich.
Ich bin um jede Hilfe sehr dankbar! Falls irgendwas zu kompliziert erklärt ist oder unverständlich bitte bescheid sagen ich werde mich darum bemühen, dass mein Problem leicht verständlich ist.
Gruß H.S.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA/Datum Problem
11.02.2020 14:07:10
Werner
Hallo,
eine TextBox enthält, wie der Name schon sagt, Text. Wenn dort ein Datum drin steht, dann mußt du das beim Schreiben in eine Zelle auch in ein Datum umwandeln.
Tabelle3.Cells(last, 1).Value = CDate(Instandhaltungsaufschreibung.BoxDatum)
Da sollte dann aber auch eine entsprechende Prüfung rein, ob eine Zahl in der Textbox steht, die auch einem gültigen Datum entspricht.
If IsNumeric(Instandhaltungsaufschreibung.BoxDatum) Then
If IsDate(Instandhaltungsaufschreibung.BoxDatum) Then
Tabelle3.Cells(last, 1) = CDate(Instandhaltungsaufschreibung.BoxDatum)
Else
MsgBox "Fehler: Wert ist kein gültiges Datum."
Instandhaltungsaufschreibung.BoxDatum.SetFocus
Exit Sub
End If
Else
MsgBox "Fehler: Der Wert ist nicht numerisch."
Instandhaltungsaufschreibung.BoxDatum.SetFocus
Exit Sub
End If
Dann stellt sich gleich noch die Frage was denn in der Textbox Text_Dauer drin steht?
Gruß Werner
Anzeige
AW: Excel VBA/Datum Problem
11.02.2020 14:41:09
Heinz
Hallo Werner,
dein Tipp mit dem CDate Befehl funktioniert so weit. Die Abfrage brauche ich glaube ich nicht, da ich die Daten schon fertig in die Combobox einspeise und diese dann nur noch ausgewählt werden müssen. Die Mitarbeiter können das Feld jedoch auch leer lassen und dann erscheint in dem Feld "Kein Datum".
In der Textbox Text_Dauer stehen die geleisteten Stunden
Bsp.: Datum, Mitarbeiter, Stunden, etc.
Vielen Dank für die schnelle Antwort.
Gruß H.S.
Anzeige
AW: Excel VBA/Datum Problem
11.02.2020 14:55:50
Werner
Hallo,
natürlich brauchst du die Prüfung. Wenn nämlich "kein Datum" in deiner Textbox steht, dann läuft der Code in einen Fehler. Ein Text kann nun mal nicht in ein Datum gewandelt werden.
If IsNumeric(Instandhaltungsaufschreibung.BoxDatum) Then
Tabelle3.Cells(last, 1) = CDate(Instandhaltungsaufschreibung.BoxDatum)
Else
Tabelle3.Cells(last, 1) = Instandhaltungsaufschreibung.BoxDatum
End If
Gruß Werner
Anzeige
AW: Excel VBA/Datum Problem
12.02.2020 09:20:30
Heinz
Hallo Werner,
okay ich denke ich habe es verstanden.
Vielen Dank für die Hilfe - es funktioniert soweit alles wie ich es möchte!
Gruß H.S.
Gerne u. Danke für die Rückmeldung. o.w.T.
12.02.2020 09:25:01
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Datum korrekt in dynamische Tabellen einfügen


Schritt-für-Schritt-Anleitung

  1. VBA-Userform erstellen: Erstelle eine Userform, die eine ComboBox für die Datumsauswahl und andere Eingabefelder enthält.
  2. Datum formatieren: Stelle sicher, dass das Datum korrekt in die Zelle übertragen wird. Nutze den CDate-Befehl in deinem Code, um das Datum zu konvertieren:
    Tabelle3.Cells(last, 1).Value = CDate(Instandhaltungsaufschreibung.BoxDatum)
  3. Fehlerbehandlung einfügen: Implementiere eine Prüfung, um sicherzustellen, dass der eingegebene Wert ein gültiges Datum ist:
    If IsNumeric(Instandhaltungsaufschreibung.BoxDatum) Then
       If IsDate(Instandhaltungsaufschreibung.BoxDatum) Then
           Tabelle3.Cells(last, 1) = CDate(Instandhaltungsaufschreibung.BoxDatum)
       Else
           MsgBox "Fehler: Wert ist kein gültiges Datum."
           Instandhaltungsaufschreibung.BoxDatum.SetFocus
           Exit Sub
       End If
    Else
       MsgBox "Fehler: Der Wert ist nicht numerisch."
       Instandhaltungsaufschreibung.BoxDatum.SetFocus
       Exit Sub
    End If
  4. Datenübertragung: Sorge dafür, dass die Daten korrekt in das Zielblatt übertragen werden und die Eingabemaske ordnungsgemäß funktioniert.
  5. Testen: Überprüfe die Funktionalität, indem du verschiedene Datumswerte eingibst und sicherstellst, dass sie korrekt formatiert werden.

Häufige Fehler und Lösungen

  • Datum wird nicht erkannt: Wenn das Datum nicht rechtsbündig angezeigt wird, liegt es oft daran, dass es als Text gespeichert wird. Stelle sicher, dass du den CDate-Befehl korrekt anwendest.
  • Fehlermeldung bei "Kein Datum": Implementiere eine Prüfung, um sicherzustellen, dass der Wert in der ComboBox ein gültiges Datum ist. Andernfalls setze den Wert auf "Kein Datum":
    If BoxDatum.Value = "" Then BoxDatum.Value = "Kein Datum"

Alternative Methoden

  • Verwendung eines Datepickers: Wenn der Datepicker im Firmennetzwerk nicht funktioniert, kannst du auch auf eine alternative Eingabemethode zurückgreifen, wie z.B. eine Datumsauswahl über eine ComboBox.
  • Eingabemaske anpassen: Überlege, ob du die Userform so anpassen kannst, dass die Auswahl von Datumswerten intuitiver ist, um Fehler bei der Dateneingabe zu minimieren.

Praktische Beispiele

Hier ist ein Beispiel, wie du die Eingabemaske für die Stunden und das Datum gestalten kannst:

Private Sub Button_Take_Click()
    If BoxDatum.Value = "" Then BoxDatum.Value = "Kein Datum"
    ' ... andere Datenübertragungen ...
    Tabelle3.Cells(last, 1).Value = CDate(Instandhaltungsaufschreibung.BoxDatum)
    ' ... weitere Logik ...
End Sub

Verwende die oben genannten Prüfungen, um sicherzustellen, dass die Benutzereingaben immer korrekt verarbeitet werden.


Tipps für Profis

  • VBA-Fehlerbehandlung: Nutze die On Error-Anweisung, um Laufzeitfehler besser zu handhaben.
  • Datenvalidierung: Implementiere Validierungsregeln in der Userform, um sicherzustellen, dass nur gültige Daten eingegeben werden.
  • Eingabefelder klar kennzeichnen: Mache deutlich, welche Felder Pflichtfelder sind. Dies verbessert die Benutzerfreundlichkeit deiner Anwendung.

FAQ: Häufige Fragen

1. Warum wird mein Datum nicht richtig formatiert?
Das kann daran liegen, dass der Wert als Text gespeichert wird. Stelle sicher, dass du den CDate-Befehl verwendest, um den Wert in ein Datum zu konvertieren.

2. Was passiert, wenn ein ungültiger Wert eingegeben wird?
Es ist wichtig, eine Fehlerprüfung einzubauen, damit der Benutzer informiert wird, wenn ein ungültiger Wert eingegeben wird.

3. Kann ich den Datepicker auch anders verwenden?
Wenn er im Firmennetzwerk nicht funktioniert, kannst du stattdessen eine ComboBox zur Auswahl des Datums verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige