Probleme mit der Find-Methode in einem Makro
25.10.2013 17:33:47
Kasimir
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 ZeileLoop 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