Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA If Datum Then...

VBA If Datum Then...
16.03.2016 13:40:36
Tim
Hallo zusammen,
folgendes Problem:
Ich habe in einer Userform verschiedene Abfragen. Unter anderem einen DTPicker zur Abfrage des Datums. Zur Zeit werden die Daten aus der Userform in einen andere Arbeitsmappe in der Tabelle "Datenbank" abgelegt.
Jetzt möchte ich eine Abfrage die im DTPicker schaut welcher Monat denn ausgewählt ist und anschließend die Daten in der Mappe nicht mehr stumpf in "Datenbank" ablegt, sondern in jeweiligen Monate. Also Tabellenblatt "Januar", "Februar", usw.
Ich würde jetzt wahrscheinlich probieren mit der If-Anweisung zu arbeiten.
If DTPicker Month = 1 Then
schreibe in "Januar"
If DTPicker Month = 2 Then
schreibe in "Feburar"
Mein Code wäre dieser hier (dank Hilfe von euch!)
'***************************************************************************
'Test aus Herber Forum
'***************************************************************************
'prüfen, ob die Datenbankdatei geöffnet ist.
Dim strVerzeichnisDatei As String
Application.ScreenUpdating = False
strVerzeichnisDatei = "Datenbank.xlsx"
If DateiIstFrei(strVerzeichnisDatei) = False Then
MsgBox "Datei ist bereits geöffnet !" & vbLf & "Bitte in ein paar Sekunden nochmals versuchen."
Exit Sub
End If
'In Datenbank schreiben
Dim wkbDB As Workbook
Dim wksDB As Worksheet
Dim Zeile As Integer
Set wkbDB = Application.Workbooks.Open(Filename:=strVerzeichnisDatei)
Set wksDB = wkbDB.Worksheets("Datenbank")
'In die erste freie Zeile schreiben
With wksDB
Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(Zeile, 1) = Format(Me.DTPicker1.Value, "dd.mm.yy") & ", " _
& Format(Me.DTPicker2.Value, "hh:mm")
.Cells(Zeile, 2) = Me.ComboBox2.Value
.Cells(Zeile, 3) = Format(Me.DTPicker3.Value, "hh:mm")
.Cells(Zeile, 4) = Me.TextBox4.Text & "; " & Me.TextBox5.Text
.Cells(Zeile, 5) = Me.ComboBox3.Value
.Cells(Zeile, 6) = Me.ComboBox1.Value
End With
wkbDB.Close savechanges:=True
Application.ScreenUpdating = True
Ich weiß nicht richtig, aber die Richtung sollte verständlich sein.
Nun bin ich mir ziemlich sicher, dass das auch einfacher geht.
Selbst bin ich nicht der VBA Crack, aber geht sowas über ein Array?
Vielen Dank im Voraus!
Gruß
Tim

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA If Datum Then...
16.03.2016 13:58:15
Michael
Hi Tim,
mit "Febu-rar" wird das Programm nicht umgehen können...
Aber im Ernst: alle Daten in *einem* Tabellenblatt zu halten, finde ich gar nicht so verkehrt: daraus mit einem Filter oder diversen Sortierungen eine "Abfrage" zu bestimmten Monaten zu gestalten ist relativ simpel.
Andersherum: wenn die Daten auf einzelne Monate verteilt sind, kommt bestimmt der Tag, an dem Du eine monatsübergreifende Auswertung benötigst: die Überlegung, wie das denn geht, ist überflüssig, wenn Du alles in einem Blatt hast.
Ansonsten guck Dir mal select case in der Hilfestellung an bzw.
Sub test()
MsgBox Format(1, "MMMM")
End Sub

damit kannst Du den Monat erzeugen, etwa:
Set wksDB = wkbDB.Worksheets(Format(DTPicker Month, "MMMM"))
Schöne Grüße,
Michael

Anzeige
P.S.:
16.03.2016 14:00:44
Michael
das Application.ScreenUpdating = False sollte erst NACH Deiner msgBox stehen...

AW: VBA If Datum Then...
16.03.2016 14:01:40
ChrisL
Hi Tim
Sofern immer die deutsche Excel-Version verwendet wird, kannst du mit Format(Date, "MMMM") direkt den Monat ermitteln und diesen als Tabellennamen definieren.
Vereinfachtes Beispiel:
Sub t()
Dim DatPickWert As Date
Dim WS As Worksheet
DatPickWert = Date
Set WS = Worksheets(Format(DatPickWert, "MMMM"))
With WS
zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(zeile, 1) = "Test"
'    .Cells(Zeile, 1) = Format(Me.DTPicker1.Value, "dd.mm.yy") & ", " _
'    & Format(Me.DTPicker2.Value, "hh:mm")
'    .Cells(Zeile, 2) = Me.ComboBox2.Value
'    .Cells(Zeile, 3) = Format(Me.DTPicker3.Value, "hh:mm")
'    .Cells(Zeile, 4) = Me.TextBox4.Text & "; " & Me.TextBox5.Text
'    .Cells(Zeile, 5) = Me.ComboBox3.Value
'    .Cells(Zeile, 6) = Me.ComboBox1.Value
End With
End Sub

Falls der Code sprachunabhängig funktionieren muss, dann wie von dir vorgeschlagen. Allerdings ist in solchen Situationen "Select Case" schöner
Sub t()
Dim DatPickWert As Date
Dim WS As Worksheet
DatPickWert = Date
Select Case Month(DatPickWert)
Case 1: Set WS = Worksheets("Januar")
Case 2: Set WS = Worksheets("Februar")
Case 3: Set WS = Worksheets("März")
Case 4: Set WS = Worksheets("April")
'usw.
End Select
With WS
zeile = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(zeile, 1) = "Test"
'    .Cells(Zeile, 1) = Format(Me.DTPicker1.Value, "dd.mm.yy") & ", " _
'    & Format(Me.DTPicker2.Value, "hh:mm")
'    .Cells(Zeile, 2) = Me.ComboBox2.Value
'    .Cells(Zeile, 3) = Format(Me.DTPicker3.Value, "hh:mm")
'    .Cells(Zeile, 4) = Me.TextBox4.Text & "; " & Me.TextBox5.Text
'    .Cells(Zeile, 5) = Me.ComboBox3.Value
'    .Cells(Zeile, 6) = Me.ComboBox1.Value
End With
End Sub

cu
Chris

Anzeige
AW: VBA If Datum Then...
18.03.2016 05:09:05
Tim
Hallo Chris,
vielen Dank. Es funktioniert fast perfekt. Mit deinem Code schreibt er allerdings immer in den aktuellen Monat. Soweit so gut. Ich brauche aber den Monat aus dem DTPicker. Wenn ich dort z.B. den 30.01.2016 anwähle soll er mir die Daten in das Tabellenblatt "Januar" schieben.
Hast du eine Idee wie das umgesetzt werden kann?
Gruß
Tim

AW: VBA If Datum Then...
18.03.2016 08:31:20
ChrisL
Hi Tim
Das war auch nur als Beispiel/Test gemeint. DatPickWert wäre das Datum aus deinem "Picker"
etwa so...
DatPickWert = Me.DTPicker1.Value
cu
Chris

AW: VBA If Datum Then...
20.03.2016 21:08:30
Tim
Hallo,
hat funktioniert. Super!!! Vielen Dank für die Hilfe.
Thema erledigt!
Gruß
Tim
Anzeige

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige