Anzeige
Archiv - Navigation
1396to1400
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code für Kontrolle des Datums

VBA Code für Kontrolle des Datums
04.12.2014 09:06:08
Martin
Hallo zusammen,
Eine Freundin wünscht für eine Excel-Datei eine Kontrolle des Datums. Für die Ausgabe hat sie sich drei Varianten gewünscht, von denen sie sich dann für Eine entscheidet.
nachdem ich bei der Suche nicht fündig wurde stelle ich die Frage direkt an Euch (siehe angehängte Excel-Datei):
In Spalte A steht das Datum für den Posteingang, in Spalte B steht, wann der Datensatz weiter bearbeitet wurde. Um das Ganze besser auszutesten habe ich das Datum in Spalte A variabel gehalten.
Nun soll ausgegeben werden, wenn ein Datensatz vor mehr als einen Monat eingegangen ist (Spalte A), jedoch noch nicht weiter bearbeitet wurde (Spalte B = leer). In meiner Beispieldatei ist dies in Zeile 5 & Zeile 6 gegeben. Nun zu den drei gewünschten Varianten:
Variante 1: Es soll ein Makro geben, dass bei Start automatisch per Messagebox sämtliche Zeilen ausgibt, die "überfällig" sind.
Variante 2: Bedingte Formatierung. Das habe ich schon mal in Spalte C vorbereitet.
Variante 3: Es soll ein Makro geben, dass bei Klick auf einen Button die "überfälligen" Datensätze (=die gesamte Zeile) in eine neue Excel-Datei schreibt.
(Variante 4: Mir ist des weiteren noch eingefallen, dass man das Ganze auch mit der Sortieren & Filtern Funktion manuell hinbekommt.)
Könnt Ihr mir für Variante 1 & Variante 3 ein Makro erstellen? Meine Excel-Kenntnisse bezeichne ich zwar als gut, aber bei VBA hört es auf. Lesen kann ich es inzwischen, aber beim Schreiben fehlen mir die ganzen Begriffe.
Warum es so viele Varianten gibt: Alle aufgeführten Varianten haben Vor- aber auch Nachteile. Eine eierlegende Wollmilchsau ist weder meiner Freundin noch mir eingefallen. Wenn Euch eine bessere Lösung einfällt nur her damit :-D
https://www.herber.de/bbs/user/94178.xlsm
Vielen Dank im Voraus
Gruß
Martin

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 09:29:35
yummi
Hallo Martin,
ungetestet sollte so aber gehen:

Option Explicit
Sub Variante1()
Dim lletzteZeile As Long
Dim i As Long
Dim wks As Worksheet
With Sheets("Tabelle1")  'Tabellennamen evtl anpassen
lletzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lletzteZeile
If .Cells(i, 1).Value  "" And .Cells(i, 2).Value = "" Then
MsgBox ("Zeile " & i)
End If
Next i
End With
End Sub
Sub Variante3()
Dim lletzteZeile As Long
Dim i As Long
Dim wks As Worksheet
Dim wksziel As Worksheet
Dim j As Long
Set wks = ActiveWorkbook.Sheets("Tabelle1")
With Application
.Visible = False
.Workbooks.Add
.ActiveWorkbook.SaveAs "C:\test.xls"   'Anpassen
'        .Quit 'beendet die Excel-Instanz und schließt auch das ursprünglich geöffnete Dokument
Set wksziel = .ActiveWorkbook.Sheets(1)
End With
With wks
lletzteZeile = .Cells(Rows.Count, 1).End(xlUp).Row
wks.Rows(1).Copy wksziel.Rows(1)
j = 2
For i = 1 To lletzteZeile
If .Cells(i, 1).Value  "" And .Cells(i, 2).Value = "" Then
wks.Rows(i).Copy wksziel.Rows(j)
j = j + 1
End If
Next i
End With
End Sub
Gruß
yummi

Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 09:49:48
Martin
Hallo yummi,
Vielen Dank, das ging sehr schnell! Ich habe den Code im VBA-Editor eingefügt.
Bei den beiden Varianten werden jedoch alle Datensätze ausgegeben, bei denen Spalte B leer ist. Allerdings muss noch geprüft werden, ob Spalte A älter als ein Monat ist. D.h. an dieser Stelle .Cells(i, 1).Value sollte .Cells(i, 1).Value Heute minus ein Monat sein. Kannst Du mir das noch als VBA-Code nennen?
Ist es möglich, bei Variante 1 alle überfälligen Datensätze in eine Checkbox zu packen?
Obwohl .Quit ausgeblendet ist schließt sich Excel bei Ausführen von Variante 3. Was habe ich falsch gemacht?

Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 09:54:15
Martin
Bzw., um korrekt zu sein:
.Cells(i, 1).Value  ""

AW: VBA Code für Kontrolle des Datums
04.12.2014 10:09:49
yummi
Hallo Martin,
lag an visible = false.
Datumsprüfung jetzt auch mit drin

Option Explicit
Sub Variante1()
Dim lletzteZeile As Long
Dim i As Long
Dim wks As Worksheet
Set wks = ActiveWorkbook.Sheets("Tabelle1")   'Tabellennamen evtl anpassen
lletzteZeile = wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
For i = 1 To lletzteZeile
If IsDate(wks.Cells(i, 1).Value) Then
If wks.Cells(i, 1).Value  "" And wks.Cells(i, 2).Value = "" And Date - wks.Cells( _
i, 1).Value > 30 Then
MsgBox ("Zeile " & i)
End If
End If
Next i
End Sub
Sub Variante3()
Dim lletzteZeile As Long
Dim i As Long
Dim wks As Worksheet
Dim wksziel As Worksheet
Dim j As Long
Set wks = ActiveWorkbook.Sheets("Tabelle1")
With Application
.Workbooks.Add
'.ActiveWorkbook.SaveAs "C:\test.xls"   'Anpassen
'        .Quit 'beendet die Excel-Instanz und schließt auch das ursprünglich geöffnete Dokument
Set wksziel = .ActiveWorkbook.Sheets(1)
End With
With wks
lletzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
wks.Rows(1).Copy wksziel.Rows(1)
j = 2
For i = 1 To lletzteZeile
If IsDate(wks.Cells(i, 1).Value) Then
If wks.Cells(i, 1).Value  "" And wks.Cells(i, 2).Value = "" And Date - wks. _
Cells(i, 1).Value > 30 Then
wks.Rows(i).Copy wksziel.Rows(j)
j = j + 1
End If
End If
Next i
End With
End Sub
Gruß
yummi

Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 12:31:53
Martin
Sehr schön, danke yummi.
Ich lasse das Kontrollkästchen allerdings noch aktiv. Die offene Frage ist: Kann man programmieren, dass nur eine Checkbox kommt, in der alle Datensätze aufgeführt sind?

AW: VBA Code für Kontrolle des Datums
04.12.2014 12:40:23
yummi
Hallo Martin,
auch das lässt sich realisieren. Nur wie willst Du es haben?
Meinst Du eine Zelle, in der du per drop-down aus den Werten auswählen kannst?
Wenn ja wonach willst Du auswählen (nach Datum?)
Und was soll nach der Auswahl passieren?
Gruß
yummi

AW: VBA Code für Kontrolle des Datums
04.12.2014 12:45:32
Martin
Aktuell kommt eine Checkbox, in der "Zeile 5" steht. Wenn ich dies bestätige kommt eine Checkbox , in der "Zeile 6" steht.
Wünschenswert ist eine Checkbox, in der (für das Beispiel) folgendes untereinander steht:
Zeile 5
Zeile 6
Das ganze würde ich dann noch textlich ausschmücken, sofern das die favorisierte Variante sein soll.

Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 12:52:29
yummi
Hallo Martin,
da du aktuell kommt eine Checkbox... schreibst, nehme ich mal an Du meinst mit Checkbox die Messagebox (Checkboxen sind was anderes)
dann so:

Sub Variante1b()
Dim lletzteZeile As Long
Dim i As Long
Dim wks As Worksheet
Dim str As String
Set wks = ActiveWorkbook.Sheets("Tabelle1")   'Tabellennamen evtl anpassen
lletzteZeile = wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
For i = 1 To lletzteZeile
If IsDate(wks.Cells(i, 1).Value) Then
If wks.Cells(i, 1).Value  "" And wks.Cells(i, 2).Value = "" And Date - wks.Cells( _
i, 1).Value > 30 Then
If str = "" Then
str = "Zeile " & i
Else
str = str & vbCrLf & "Zeile " & i
End If
End If
End If
Next i
MsgBox str
End Sub
Gruß
yummi

Anzeige
AW: VBA Code für Kontrolle des Datums
04.12.2014 12:58:07
Martin

kommt eine Checkbox... schreibst, nehme ich mal an Du meinst mit Checkbox die Messagebox 
Genauso ist es, mein Fehler, sorry
Ansonsten Klappt alles wie gewünscht - Vielen Dank!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige