PDA

Vollständige Version anzeigen : nach aktuellem Datum suchen


phobos
17.07.2012, 09:53
Hi,

wollte in einer Tabelle nach dem aktuellen Datum in Spalte A suchen.
Anschließend soll mir der Zelleninhalt verschiedener Zellen in der Zeile kopiert werden.
Ich scheitere Allerdings schon bei der Datumssuche.
aktDatum = Workbooks(Datei1).Worksheets("Daten").Rows(1).Find(What:=Date, After:=Cells(4, 1), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False)
Typen unverträglich.

Beverly
17.07.2012, 09:59
Hi Mario,

Sub DatumsSuche()
Dim aktDatum As Range
Set aktDatum = Workbooks("Datei1").Worksheets("Daten").Rows(1).Find(What:=Date, After:=Cells(4, 1), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False)
If Not aktDatum Is Nothing Then
' hier der Code was weiter geschehen soll wenn das Datum gefunden wurde
End If
Set aktDatum = norhing
End Sub
<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

chris-kaiser
17.07.2012, 10:01
Hi


After:=Cells(1, 4)

darum! Typenunverträglich

aber danach hast du mit Sicherheit den nächsten Fehler!
der ist im letzten Post beschrieben.

EarlFred
17.07.2012, 10:04
Hallo mario,

Spalte A
<>
Rows(1)
Du kannst auch keine Suche in Zeile 1 nach der Zelle A4 beginnen.

Die Datumssuche mit Find ist ohnehin tückisch - zuverlässiger funktioniert dies mit der Arbeitsblattfunktion "Match".

Unvollständige Bezüge kommen noch dazu, siehe Chris' Hinweis.

Grüße
EarlFred

phobos
17.07.2012, 10:15
da is noch der Wurm drin.
Columns anstatt rows bringt mich auch net weiter. da kommen, wie schon erwähnt, weitere Fehler.:(

wie könnte ein funktionierender Code aussehen?

EarlFred
17.07.2012, 10:44
Hallo mario,

wie könnte ein funktionierender Code aussehen?
unter Berücksichtigung der Hinweise von Karin, Chris und mir z. B. so:
Option Explicit

Sub phobos()
Dim Datei1 As String 'warum nicht vom Typ Workbook?
Dim aktDatum As Range

Datei1 = ActiveWorkbook.Name 'nur zu Testzwecken!

With Workbooks(Datei1).Worksheets("Daten")

Set aktDatum = .Columns(1).Find(What:=Date, After:=.Cells(4, 1), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False)

End With

If Not aktDatum Is Nothing Then MsgBox aktDatum.Row
End Sub

Schaust Du Dir die erhaltenen Hilfestellungen nicht an und verarbeitest Du sie nicht? Das ist doch schade um die vergebene Möglichkeit, etwas zu lernen.


Code mit der Arbeitsblattfunktion Match (=Vergleich):
Option Explicit

Sub phobos()
Dim Datei1 As String 'warum nicht als Typ Workbook?
Dim aktDatum As Variant

Datei1 = ActiveWorkbook.Name 'nur zu Testzwecken!

With Workbooks(Datei1).Worksheets("Daten")

aktDatum = Application.Match(CLng(Date), .Columns(1), 0)

End With

If Not IsError(aktDatum) Then MsgBox "Fundzeile des heutigen Datums: " & aktDatum
End Sub


Grüße
EarlFred

phobos
17.07.2012, 12:14
Schaust Du Dir die erhaltenen Hilfestellungen nicht an und verarbeitest Du sie nicht?
na klar schau ich mir das an und probier es nachzuvollziehen.
Dies klappt allerdings nicht immer.

Bei der ersten Variante die du im letzten Beitrag gepostet hast, wird kein Wert für die Variable aktdatum ausgegeben.--> "aktdatum =Nothing"

Wenn ich das richtig verstanden habe sollte hier die Zeilenzahl kommen in der das heutige Datum steht.

Auch bei deinem zweiten Code bleibt "aktdatum" leer und es kommt Fehlermeldung

sorry, komm nicht auf den Fehler.

chris-kaiser
17.07.2012, 12:50
Hi

lade eine Demo hoch!
Das Orginal aber ohne irgendwelchen Inhalt, alleine die Datumsspalte würde reichen.

EarlFred
17.07.2012, 12:59
Hallo mario,

Auch bei deinem zweiten Code bleibt "aktdatum" leer und es kommt Fehlermeldung
das mag ich Dir nicht ganz abnehmen...

In solchen Fällen kann man mal einen Haltepunkt (F9) setzen und sich den Inhalt von aktDatum anschauen:
If Not IsError(aktDatum) Then MsgBox "Fundzeile des heutigen Datums: " & aktDatum
Ich vermute, die Variable enthält einen Fehlerwert. Die Mitteilung an uns, um welchen Fehlerwert es sich handelt, könnte ebenfalls weiterhelfen. Ich tippe mal auf Fehler 2042 (#NV).

Dass ich die Variable Datei1 zu Testzwecken (anders) befüllt habe, ist Dir aufgefallen? Diese Zeile löschen / auf Deinen Bedarf hin anpassen.


Bei der ersten Variante die du im letzten Beitrag gepostet hast, wird kein Wert für die Variable aktdatum ausgegeben.--> "aktdatum =Nothing"
Es grenzt schon an Zufall, wenn es einem gelingt, das gewünschte Datum mit FIND zu finden. Mein Hinweis zur Tücke dieser Methode bezogen auf Datumswerte kam ja nicht aus lauter Langeweile - das häufige Ergebnis, wenn man es dennoch damit versucht, hast Du zutreffend beschrieben.


Grüße
EarlFred

phobos
17.07.2012, 14:48
@Chris
Hier mal ein Auszug aus der Mappe ("Datum Test.xls")

In Spalte A soll das aktuelle Datum gesucht werden. Und die Werte in den Spalten dahinter sollen kopiert werden.

Der Code steht in einem Modul einer anderen Mappe.
Die Mappe ("Datum Test.xls") wird im Code geöffnet.

@EarlFred

Wie schon erwähnt.
"aktDatum" hat den Wert "Nothing"

EarlFred
17.07.2012, 15:05
Hallo mario,

Wie schon erwähnt.
"aktDatum" hat den Wert "Nothing"
auf was genau bezieht sich diese Aussage? Kann ich nicht zuordnen. Meine Rückfragen sind dadurch auch nicht beantwortet. Meinen Hinweis darauf, dass das Auffinden von Datumswerten mit Find oftmals fehlschlägt (was zum Ergebnis aktDatum = Nothing führt...) habe ich ja nun hoffentlich oft genug und deutlich genug geäußert.

Bei Verwendung meines 2. Codes und korrekter Blattnamen wird das heutige Datum korrekt in Zeile 115 gefunden:
With Workbooks(Datei1).Worksheets("Datei")

Eine Bitte für die Zukunft: Zu einer Fehlerbeschreibung gehört immer die Angabe der Codezeile, in der der Fehler auftritt sowie die Benennung des Fehlers (Fehlernummer / -beschreibung). Der Laufzeitfehler 9 "Index außerhalb des gültigen Bereichs" in der vorstehenden Zeile hätte einen eindeutigen Hinweis auf die tatsächliche Ursache des Problems gegeben. Deine anderen Hinweise waren hingegen lediglich irreführend.

Grüße
EarlFred

chris-kaiser
17.07.2012, 15:11
Hallo Mario

der Code von EarlFred geht einwandfrei.

ABER das Datum muss in Systemzeit formatiert sein ;)

TT.MM.JJJJ

dann geht es.

p.s den Pfad habe ich im Moment auf ActiveWorkbook... umgeändert das gehört natürlich wieder geändert!

phobos
17.07.2012, 15:35
Sorry für die ungenaue Fehlerbeschreibung:(
Es lag nun tatsächlich an der Datumsformatierung.
Die Codes haben alle funktioniert.
Danke für eure Unterstützung.

btw.
wäre es möglich den Code unabhägig von der Datumsformatierung auszuführen?

Beverly
17.07.2012, 15:42
Hi Mario,

mit Application.Match wird das Datum auf jeden Fall gefunden - unabhängig vom Zellformat.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/" onclick="window.open(this.href);return false"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>