Fehlermeldung: Objektvariable oder With-Blockvariable nicht festgelegt (Fehler 91) - Wie kann ich sie vermeiden?

16/06/2008 - 10:37 von Walter Heying | Report spam
Hallo,

ich bekam bei einer Datei, bei der ich einige Ergànzungen des VBA-
Codes vornahm die obige Fehlermeldung.
Der Code, der wahrscheinlich greift lautet folgendermaßen:
Ereignismakro mit Verzweigung in "normales" Makro
­­
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fehler
Application.EnableEvents = False


If Target.Cells.Count = 1 And Not Intersect(Target,
Range("c4:it104")) Is Nothing Then
Cells(2, 1) = 2
Formel_Mitarbeiterliste_CQ1_eintragen 'Makro ausführen
End If
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("c111:it211")) Is Nothing Then
Cells(2, 1) = 109
Formel_Mitarbeiterliste_CQ1_eintragen 'Makro ausführen
End If
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("c218:it318")) Is Nothing Then
Cells(2, 1) = 216
Formel_Mitarbeiterliste_CQ1_eintragen 'Makro ausführen
End If
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("c325:it425")) Is Nothing Then
Cells(2, 1) = 323
Formel_Mitarbeiterliste_CQ1_eintragen 'Makro ausführen
End If
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("c432:it532")) Is Nothing Then
Cells(2, 1) = 430
Formel_Mitarbeiterliste_CQ1_eintragen 'Makro ausführen
End If
fehler:
Application.EnableEvents = True
Cells(2, 1) = ""
End Sub
­­
Sub Formel_Mitarbeiterliste_CQ1_eintragen()
Application.ScreenUpdating = False
Sheets("Mitarbeiterliste").Unprotect ("asdf9")


On Error GoTo fehler
Application.EnableEvents = False


Dim Spalte As Range
Dim Zeile As Range
Sheets("Personalfeinplanung").Select
Abzugszeilen = Cells(2, 1)
Aktivzeile = Selection.Row
Suchname = Selection.Offset(0, -2)
Suchdatum = Selection.Offset(0 - Aktivzeile + Abzugszeilen,
-2)
Sheets("Mitarbeiterliste").Select
With Sheets("Mitarbeiterliste").Range("cq3:fr3") 'auf diesem
Blatt direkt zu sehende Zelle
Set Spalte = .Find(Suchname) 'Suchbegriff
End With
If Not Spalte Is Nothing Then 'Schleife um die erste leere
Zelle zu finden
Spalte.Select
suchspalte = ActiveCell.Column
End If
With Sheets("Mitarbeiterliste").Range("m4:m373") 'auf diesem
Blatt direkt zu sehende Zelle
Set Zeile = .Find(Suchdatum) 'Suchbegriff
End With
If Not Zeile Is Nothing Then 'Schleife um die erste leere
Zelle zu finden
Zeile.Select
Suchzeile = ActiveCell.Row
End If
Range("CQ1").Copy
Cells(Suchzeile, suchspalte).PasteSpecial
Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False,
Transpose:=False
Cells(Suchzeile, suchspalte).Copy
Cells(Suchzeile, suchspalte).PasteSpecial
Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False,
Transpose:=False
Sheets("Personalfeinplanung").Select


fehler:
Application.EnableEvents = True
Sheets("Mitarbeiterliste").Protect ("asdf9")
Application.ScreenUpdating = True
End Sub
­­
Könnte es eventuell auch daran liegen, dass das direkt vorgenannte
Makro auf ein Blatt springt und dort Verànderungen vornimmt, in dem
wiederum ein Ereignismakro abgelegt wird. Es hat folgenden Inhalt:
­­
Private Sub Worksheet_Change(ByVal Target As Range)
'Gewollte fehlererzeugende Angabe, damit man das Ereignismakro
manuell
durchlaufen lassen kann


Sheets("Mitarbeiterliste").Unprotect ("asdf9")


Application.ScreenUpdating = False


On Error GoTo Ende_oder_fehler
Application.EnableEvents = False


'Wenn ein Team geàndert oder eingetragen wird eine
Identifizierungsnummer setzen
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("ft4:iu373")) Is Nothing Then
Range(Target.Address).Select
If Selection = Selection.Offset(-1, 0) Then
Selection.Offset(0, -162).Select
Selection.FormulaR1C1 = "=R[-1]C"
Selection.Offset(0, 162).Select
GoTo Ende_oder_fehler
End If
Selection.Offset(0, -162).Select
Selection.FormulaR1C1 "=IF(OR(RC[162]="""",RC[162]=0),"""",COUNTIF(RC176:RC[162],RC[162])+
(RC[162]*100))"
Selection.Copy
Aktivzeile = ActiveCell.Row
aktivspalte = ActiveCell.Column
ActiveSheet.Range(ActiveCell, ActiveCell.Offset(373 -
Aktivzeile, 0)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Offset(0, 162).Select
End If
'Wenn ein Name geàndert oder neu eingetragen wird, wird die
Teamzuordnung abgefragt und eingetragen
If Target.Cells.Count = 1 And Not Intersect(Target,
Range("cq3:fr3")) Is Nothing Then
Range(Target.Address).Select
Teamzuordnung = InputBox("In welchem Team soll der neu
eingetragene Mitarbeiter arbeiten?", "Teamzuordnung")
If Teamzuordnung = "" Then
Selection = ""
GoTo Ende_oder_fehler
End If
Selection.Offset(1, 81).Select
Selection = Teamzuordnung
'Wenn Zelleninhalt gleich der darüberliegenden Zelle
entspricht
Selection.Offset(0, -162).Select
Selection.FormulaR1C1 "=IF(OR(RC[162]="""",RC[162]=0),"""",COUNTIF(RC176:RC[162],RC[162])+
(RC[162]*100))"
Selection.Copy
Aktivzeile = ActiveCell.Row
aktivspalte = ActiveCell.Column
ActiveSheet.Range(ActiveCell, ActiveCell.Offset(373 -
Aktivzeile, 0)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.Offset(-1, 81).Select
End If


Ende_oder_fehler:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
­­
Vielleicht seht ihr den Fehler auf den Blick.
Wenn ihr weitere Erlàuterungen braucht, dann gebe ich sie euch gerne.


Gruß
Walter
 

Lesen sie die antworten

#1 Peter Schleif
16/06/2008 - 13:22 | Warnen spam
Walter Heying schrieb am 16.06.2008 10:37 Uhr:

ich bekam bei einer Datei, bei der ich einige Ergànzungen des VBA-
Codes vornahm die obige Fehlermeldung.



Den Fehler 91 konnte ich nicht reproduzieren. Ich habe aber vermutlich
auch nicht alle If-Verzweigungen deines Codes durchlaufen. Vielleicht
trotzdem ein paar Tipps:

(1.) Bitte schreibe _unbedingt_ Option Explicit an den Anfang aller
Code-Bereiche und behebe zunàchst alle Fehler die dadurch sichtbar werden.

(2.) Das muss auf jeden Fall andersrum:
fehler:
Application.EnableEvents = True
Cells(2, 1) = ""



Erst die Änderung Cells(..), dann die Events wieder zulassen. Sonst
ruft sich Worksheet_Change immer wieder selbst auf.

(3.) Suchzeile/suchspalte sind zu Beginn der Prozedur 0. Wenn .Find
nichts findet, werden sie nicht gesetzt und sind immer noch 0. Dann
löst das hier einen Fehler aus - wnn auch nicht 91:

Cells(Suchzeile, suchspalte)


Peter

Ähnliche fragen