Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1332to1336
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

Probleme mit der Find-Methode in einem Makro

Probleme mit der Find-Methode in einem Makro
25.10.2013 17:33:47
Kasimir
Hallo an alle Helfer!
Ich habe da ein Problem mit nachfolgendem VBA-Code:
Option Explicit
Sub Test()
Dim strAuftraggeber         As String
Dim strMonatsblattAuftrag   As String
Dim strFindDateaddressAuftragsdatei        As String
Dim lngLastRowAuftrag       As Long
Dim lngLastRowMitarbeiter   As Long
Dim lngRowAutraggeber       As Long
Dim lngRowFindDateaddressAuftragsdatei     As Long
Dim rngBereichAuftraggeber  As Range
Dim rngBereichAuftragsdatei As Range
Dim intWort                 As Integer
Dim intWortlänge            As Integer
Dim intDatum                As Integer
Dim intTagMonatsende        As Integer
Dim intMonatszahl           As Integer
Dim dtLastDate              As Date
Call Programmbeschleunigung_Ein
strVerzeichnis = ThisWorkbook.Sheets("Hilfstabelle").Range("J2")
strMonatsblattAuftrag = Hilfstabelle.Range("K2")
'Monatsnamen ohne Jahreszahl aus Auswahl ermitteln
intWortlänge = Len(Hilfstabelle.Range("K2"))
For intWort = 1 To intWortlänge
If Mid(Hilfstabelle.Range("K2"), intWort, 1) = " " Then Exit For
Next intWort
Select Case Mid(Hilfstabelle.Range("K2"), 1, intWort - 1)
Case "Januar"
intTagMonatsende = 31
intMonatszahl = 1
Case "Februar"
intTagMonatsende = Hilfstabelle.Range("I3")
intMonatszahl = 2
Case "März"
intTagMonatsende = 31
intMonatszahl = 3
Case "April"
intTagMonatsende = 30
intMonatszahl = 4
Case "Mai"
intTagMonatsende = 31
intMonatszahl = 5
Case "Juni"
intTagMonatsende = 30
intMonatszahl = 6
Case "Juli"
intTagMonatsende = 31
intMonatszahl = 7
Case "August"
intTagMonatsende = 31
intMonatszahl = 8
Case "September"
intTagMonatsende = 30
intMonatszahl = 9
Case "Oktober"
intTagMonatsende = 31
intMonatszahl = 10
Case "November"
intTagMonatsende = 30
intMonatszahl = 11
Case "Dezember"
intTagMonatsende = 31
intMonatszahl = 12
End Select
With Workbooks("Altra Aufträge.xls").Sheets("August 2013")
'Name des Auftraggebers aus Dateinamen ermitteln
intWortlänge = Len("Altra Aufträge.xls")
For intWort = 1 To intWortlänge
If Mid("Altra Aufträge.xls", intWort, 1) = " " Then Exit For
Next
strAuftraggeber = Mid("Altra Aufträge.xls", 1, intWort - 1)
lngLastRowAuftrag = .Cells(.Rows.Count, 15).End(xlUp).Row
'----------------------------------------------------------------------------------- _
For lngRowFindDateaddressAuftragsdatei = 1 To intTagMonatsende
dtLastDate = CDate(lngRowFindDateaddressAuftragsdatei & "." & intMonatszahl & ". _
" & Hilfstabelle.Range("I2"))
'------------------------------------------------------------------------------- _
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag).Find(What:= _
dtLastDate, _
LookIn:=xlFormulas,  _
LookAt:=xlWhole, MatchCase:=True)
If Not rngBereichAuftragsdatei Is Nothing Then
strFindDateaddressAuftragsdatei = rngBereichAuftragsdatei.Address
Do
intDatum = rngBereichAuftragsdatei.Row
MsgBox intDatum & vbLf & dtLastDate
'------------------------------------------------------------------- _
'Auftraggeber in Matarbeiterauftragsblatt finden
lngLastRowMitarbeiter = Mitarbeiteraufträge.Cells(Rows.Count, 1). _
End(xlUp).Offset(1, 0).Row
Set rngBereichAuftraggeber = Mitarbeiteraufträge.Range("A4:A" &  _
lngLastRowMitarbeiter).Find(What:=strAuftraggeber, _
LookIn:= _
xlValues, LookAt:=xlWhole, MatchCase:=True)
If Not rngBereichAuftraggeber Is Nothing Then
lngRowAutraggeber = rngBereichAuftraggeber.Row
End If
'------------------------------------------------------------------- _
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag). _
FindNext(rngBereichAuftragsdatei)
Loop While Not rngBereichAuftragsdatei Is Nothing And  _
rngBereichAuftragsdatei.Address  strFindDateaddressAuftragsdatei
End If
Next lngRowFindDateaddressAuftragsdatei
End With
End Sub
Obiger Code soll in einer Quelldatei bestimmte Datumswerte finden. Wenn ich den obigen Code durchlaufen lasse erhalte ich in der Zeile
Loop While Not rngBereichAuftragsdatei Is Nothing And rngBereichAuftragsdatei.Address strFindDateaddressAuftragsdatei
eine Laufzeitfehlermeldung 91 „Objektvariable oder With-Blockvariable nicht festgelegt“. Gehe ich mit der Maus über die Variablen, dann sehe ich bei der Variablen „rngBereichAuftragsdatei.Address“ das dort dann „rngBereichAuftragsdatei.Address = “. Wenn ich aber in dem Makro die Zeile
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag).Find(What:=dtLastDate, LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=True)
auskommentiere, läuft das Makro ohne Fehler durch.
Hat jemand einen Tipp für mich, warum ich die Fehlermeldung erhalte?
Danke und Gruß
Kasimir

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 18:40:58
Firmus
Hi Kasimir,
gerade mal so ein Gedanke:
Die angemeckerte Zeile ist ein "FIND"
Kann es sein, dass der FIND auch mal leer ausgeht (nichts findet)?
In solchen Fällen reagiert VBA mit einem Fehler.
Um das zu unterdrücken, musst Du VOR dem find-statement "ON ERROR RESUME NEXT" setzen.
Damit aber andere Fehler danach erkannt werden, hat nach dem FIND gleich wieder ein
"ON ERROR GOTO 0" (0=null) zu stehen.
Damit brauchst Du aber ein anderes Kriterium, um zu wissen, ob der FIND erfolgreich war.
Ich benutze hierzu häufig die Positition der ActiveCell(zeile,spalte) mit vorher/nachher Vergleich.
Manchmal setze ich sie sogar bewußt auf eine andere Postion vorab, damit ich zuverlässig
den Erfolg testen kann.
Mit dem Deugger (F8) läßt sich das prima testen und nachvollziehen.
Viel Erfolg.
Firmus

Anzeige
Die Find-Methode gibt stets ein Objekt ...
25.10.2013 18:52:07
Luc:-?
…zurück, Firmus;
wird nichts gefunden, ist dieses Objekt Nothing, was man so abfragt, wie es Kasimir bspw hier
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag).FindNext(rngBereichAuftragsdatei)
Loop While Not rngBereichAuftragsdatei Is Nothing

…getan hat.
Gruß Luc :-?

AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 18:48:42
Tino
Hallo,
ich habe es jetzt nicht getestet, aber wenn
rngBereichAuftragsdatei Nothing ist
kann diese auch keine Address zurückgeben weil kein Range zugewiesen.
Gruß Tino

AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 19:12:45
Kasimir
Hallo an alle!
Danke Euch für die Antworten, aber warum funktioniert dann aber der gesamte Code ohne Probleme, wenn ich in der anderen Find-Methode die Zeile
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag).Find(What:=dtLastDate, LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=True)
wie auch bereits schon geschrieben auskommentiere? Was ich auf jeden Fall sehe, wenn der Fehler auftritt, dass die Variable "rngBereichAuftragsdatei" "Nothing" ist. Allerdings weiß ich nicht, was ich nun anstellen soll.
Danke und Gruß,
Kasimir

Anzeige
AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 19:57:35
Tino
Hallo,
wenn Du diese Zeile rausnimmst, kommt der Code nicht in die Loop Schleife wegen
If Not rngBereichAuftragsdatei Is Nothing Then
Ohne jetzt alles nachzubauen kannst Du mal versuchen die Variable
lngRowAutraggeber auf 0 zu setzen wenn nichts gefunden wird und dies abfragen.

If Not rngBereichAuftraggeber Is Nothing Then
lngRowAutraggeber = rngBereichAuftraggeber.Row
Else
lngRowAutraggeber = 0
End If
Loop While lngRowAutraggeber > 0

Gruß Tino

AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 20:24:05
Tino
Hallo,
jetzt sehe ich es, es sind ja zwei verschiedene Find, die kann man nicht verschachteln.
Versuch mal so (ungetestet)
mach aus der Variablen lngRowAutraggeber ein Variant Typ

Dim lngRowAutraggeber
If Not rngBereichAuftragsdatei Is Nothing Then
strFindDateaddressAuftragsdatei = rngBereichAuftragsdatei.Address
Do
intDatum = rngBereichAuftragsdatei.Row
MsgBox intDatum & vbLf & dtLastDate
'Auftraggeber in Matarbeiterauftragsblatt finden
lngLastRowMitarbeiter = Mitarbeiteraufträge.Cells(Rows.Count, 1).End(xlUp).Offset(1, _
0).Row
lngRowAutraggeber = Application.Match(strAuftraggeber, Mitarbeiteraufträge.Range(" _
A4:A" & lngLastRowMitarbeiter), 0)
Set rngBereichAuftragsdatei = .Range("C4:C" & lngLastRowAuftrag).FindNext( _
rngBereichAuftragsdatei)
Loop While rngBereichAuftragsdatei.Address  strFindDateaddressAuftragsdatei
End If

Anzeige
AW: Probleme mit der Find-Methode in einem Makro
26.10.2013 05:08:34
Kasimir
Hallo Tino!
Dein Vorschlag hat funktioniert, besten Dank dafür. Jetzt habe ich aber noch eine Frage zu der Application.Match-Methode. Kann ich mir mit der Methode auch, anders als in Deinem Beispiel nicht die Zeile, sondern die Spalte der Übereinstimmung zurückgeben lassen? Für eine Antwort wäre ich Dir dankbar.
Ansonsten nochmal schönen Dank an alle, die hier tatkräftig geholfen haben,
Kasimir

AW: Probleme mit der Find-Methode in einem Makro
26.10.2013 05:56:59
Tino
Hallo,
diese funktin ist die Excelformel Vergleichen,
du brauchst nur den Suchbereich auf die Spalte anwenden.
Gruß Tino

für spaltennummer suchbereich auf zeile oT.
26.10.2013 05:59:09
Tino

AW: Probleme mit der Find-Methode in einem Makro
26.10.2013 06:04:08
Kasimir
Hallo Frühaufsteher! :-)
Danke Dir für Deine Antwort. Wünsche Dir noch ein schönes Wochenende.
MfG,
Kasimir

Anzeige
AW: Probleme mit der Find-Methode in einem Makro
25.10.2013 19:54:15
Firmus
Hi Kasimir,
Du kannst rngBereichAuftragsdatei.Address nicht abfragen wenn rngBereichAuftragsdatei bereits NOTHING ist. Da MUSS ein Fehler kommen.
M.E. muss Du die Abfrage splitten.
Erst die Abfrage auf NOTHING, und dann wenn NOT NOTHING (also etwas gefunden) die separate Abfrage auf rngBereichAuftragsdatei.Address. Denn nur dann ist rngBereichAuftragsdatei.Address auch belegt.
Wäre interessant ob's klappt.
@Luc: Haste recht, ich muss mit nothing noch a bisserl üben, damit es schneller parat ist.
Gruss,
Firmus

Anzeige
Na, dann, viel Spaß! ;-) Gruß owT
25.10.2013 22:35:26
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige