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

Laufzeitfehler 91

Laufzeitfehler 91
20.03.2020 10:42:32
FifiFox
Hallo liebes Forum,
ich habe folgendes Problem und hoffe, hier Hilfe zu finden:
In dem beigefügten Makros zeigt sich immer ein "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt". Wenn es alleine läuft, funktioniert es grundsätzlich, wenn es aber im Anschluss von einem anderen Makros aufgerufen wird, entsteht dieser Fehler. Ich wäre dankbar, wenn jemand eine Idee hätte, dann wäre mein Projekt nämlich fertig.
Vielen Dank im Voraus
FifiFox
Makro:
Sub Übertrag_MA_Urlaub()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim Datum As Range
Dim Name_n As Range
'On Error Resume Next
Name = Worksheets("Mitarbeiteransicht").Cells(2, 4)
i = 1
Do While i 

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 91
20.03.2020 11:03:56
peterk
Hallo
Dein Fehler liegt wahrscheinlich in der Zeile

IsDate(Cells(c.Row, c.Column - 2))
Hier solltest Du vor "Cells" einen Worksheet bezug einfügen. (Vermutlich c.Cells)
AW: Laufzeitfehler 91
20.03.2020 11:29:27
fcs
Hallo FifiFox,
wenn mehrere Tabellenblätter in den Ablauf eines Makros involviert sind, dann müssen die Referenzen für Objekte (z.B. Zellen, zellbereiche) korrekt bzw. vollständig gestzt werden.
Dies kann man sich erleichtern, wenn man mit Objekt-Variablen für die Tabellenblätter arbeitet und
With Objekt
End With 

Konstrukte benutzt, füe bessere Übersicht im Makro.
LG
Franz
Sub Übertrag_MA_Urlaub()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Dim Datum As Range
Dim Name_n As Range
Dim wksMA As Worksheet, wksUrlaub As Worksheet
'On Error Resume Next
Set wksMA = Worksheets("Mitarbeiteransicht")
Set wksUrlaub = Worksheets("Urlaubsplaner")
With wksMA
Name = .Cells(2, 4)
i = 1
Do While i 

Anzeige
AW: Laufzeitfehler 91
20.03.2020 20:29:57
FifiFox
Hallo Franz,
vielen Dank für deine Hilfe und Mühe. Das Makro läuft, in Kombination mit den anderen kommt es aber weiterhin zu dem Laufzeitfehler. Ich schreibe jetzt erstmal die anderen nach deiner Vorlage um und schaue was passiert.
Sonst hoffe ich, dass ich mich nochmal melden darf.
VG
FifiFox
AW: Laufzeitfehler 91
20.03.2020 23:26:37
FifiFox
Hallo nochmal,
habe rumprobiert, komme aber nicht weiter. Das obere Makro von Dir, Franz, funktioniert einwandfrei. Wenn es aber nach dem unten beigefügten Makro ausgeführt wird, kommt immer dieser ominöse Laufzeitfehler-91.
Keine Ahnung, warum...vielleicht kann mir nochmal jemand helfen...
VG FifiFox
Sub TZF_Import()
Dim myArray2() As Variant
Dim myArray1() As Variant
Dim i As Variant
Dim Counter_Übertrag As Integer
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Mitarbeiter = Worksheets("Mitarbeiteransicht").Cells(2, 4)
With Worksheets("TZ").Range(Worksheets("TZ").Cells(1, 1), Worksheets("TZ").Cells(500, 1)) ' _
maximal 500 TZ-Einträge
Set c = .Find(Mitarbeiter, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
n = n + 1
ReDim Preserve myArray1(n)
myArray1(n) = c.Row
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
MsgBox Join(myArray1, vbLf)
For Each i In myArray1
Erase myArray2
For Each c In Worksheets("TZ").Range(Worksheets("TZ").Cells(i, 4), Worksheets("TZ").Cells(i, _
8))
Select Case c
Case "x"
n = n + 1
ReDim Preserve myArray2(n)
If Worksheets("TZ").Cells(1, c.Column).Value = "Mo" Then
Tag = 1
ElseIf Worksheets("TZ").Cells(1, c.Column).Value = "Di" Then
Tag = 2
ElseIf Worksheets("TZ").Cells(1, c.Column).Value = "Mi" Then
Tag = 3
ElseIf Worksheets("TZ").Cells(1, c.Column).Value = "Do" Then
Tag = 4
ElseIf Worksheets("TZ").Cells(1, c.Column).Value = "Fr" Then
Tag = 5
End If
myArray2(n) = Tag 'Worksheets("TZ").Cells(1, c.Column).Value
End Select
Next
MsgBox Join(myArray2, vbLf)
j = 1
Do While j = CDate(Worksheets("TZ").Cells(i, 2)) And CDate(c)  5 Then  _
Worksheets("Mitarbeiteransicht").Cells(c.Row, c.Column + 1) = ""
If FT_Vergleich(CDate(c)) = True Then Worksheets("Mitarbeiteransicht").Cells(c.Row, c. _
Column + 1) = ""
End Select
Next
j = j + 3
Loop
Counter_Übertrag = Counter_Übertrag + 1
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige
AW: Laufzeitfehler 91
21.03.2020 01:56:51
fcs
Hallo GFifiFox,
du hast eine wichtige Information vergessen:
In welcher Zeile des Codes/Makros tritt der Fehler auf? So kann ich nur raten wo das Problem ist.
In deinem neuen Makro ist ein Problem in folender Zeile möglich, wenn das Blatt "" zum Zeipunkt der Makroausführung nicht das aktive Tabellenblatt ist.
    For Each c In Worksheets("Mitarbeiteransicht").Range(Cells(5, j + 1), Cells(36, j + 1))

Du hast vor "Cells" keine Referenz zu einem Tabellenblatt angegeben. Ist "Mitarbeiteransicht" das aktive Blatt dann funktioniert das Makro, wenn nicht gibt es einen Fehler.
Du müsstest die Zeile wie folgt anpassen:
    For Each c In Worksheets("Mitarbeiteransicht").Range( _
Worksheets("Mitarbeiteransicht").Cells(5, j + 1), _
Worksheets("Mitarbeiteransicht").Cells(36, j + 1))
Ich kann nur nochmals empfehlen mit Objektvariablen für die Tabellenblätter zu arbeiten und mit
With ... End With Kontrukten.
Dann muss man die elendig langen Worksheet-Namen nicht immer wieder wiederholen.
LG
Franz
Sub TZF_Import()
Dim myArray2() As Variant
Dim myArray1() As Variant
Dim i As Variant
Dim Counter_Übertrag As Integer
Dim wksTZ As Worksheet
Dim wksMA As Worksheet
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Set wksTZ = Worksheets("TZ")
Set wksMA = Worksheets("Mitarbeiteransicht")
Mitarbeiter = wksMA.Cells(2, 4)
With wksTZ
With .Range(.Cells(1, 1), .Cells(500, 1)) ' _
maximal 500 TZ-Einträge
Set c = .Find(Mitarbeiter, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
n = n + 1
ReDim Preserve myArray1(n)
myArray1(n) = c.Row
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End With 'wksTZ
MsgBox Join(myArray1, vbLf)
For Each i In myArray1
Erase myArray2
For Each c In .Range(.Cells(i, 4), .Cells(i, 8))
Select Case c
Case "x"
n = n + 1
ReDim Preserve myArray2(n)
If .Cells(1, c.Column).Value = "Mo" Then
Tag = 1
ElseIf .Cells(1, c.Column).Value = "Di" Then
Tag = 2
ElseIf .Cells(1, c.Column).Value = "Mi" Then
Tag = 3
ElseIf .Cells(1, c.Column).Value = "Do" Then
Tag = 4
ElseIf .Cells(1, c.Column).Value = "Fr" Then
Tag = 5
End If
myArray2(n) = Tag '.Cells(1, c.Column).Value
End Select
Next
MsgBox Join(myArray2, vbLf)
With wksMA
j = 1
Do While j = CDate(wksTZ.Cells(i, 2)) _
And CDate(c)  5 Then _
.Cells(c.Row, c.Column + 1) = ""
If FT_Vergleich(CDate(c)) = True Then _
.Cells(c.Row, c.Column + 1) = ""
End Select
Next c
j = j + 3
Loop
End With 'wksMA
Counter_Übertrag = Counter_Übertrag + 1
Next i
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Anzeige
AW: Laufzeitfehler 91
21.03.2020 08:47:41
FifiFox
Hallo Franz,
das stimmt natürlich. Habe jetzt die Codes probiert und nur noch ein "With wksTZ...End With" eingefügt. Wenn ich jetzt "TZF_Import" laufen lasse und danach "Übertrag_MA_Urlaub" kommt bei "Übertrag_MA_Urlaub" der Fehler. Ich habe beide Makros nochmal reinkopiert und bei "Übertrag_MA_Urlaub" die Zeile mit dem Fehler gekennzeichnet.
VG und Danke für die Hilfe
FifiFox
Sub Übertrag_MA_Urlaub()
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Dim Datum As Range
Dim Name_n As Range
Dim wksMA As Worksheet, wksUrlaub As Worksheet
'On Error Resume Next
Set wksMA = Worksheets("Mitarbeiteransicht")
Set wksUrlaub = Worksheets("Urlaubsplaner")
With wksMA
Name = .Cells(2, 4)
i = 1
Do While i 

Sub TZF_Import()
Dim myArray2() As Variant
Dim myArray1() As Variant
Dim i As Variant
Dim Counter_Übertrag As Integer
Dim wksTZ As Worksheet
Dim wksMA As Worksheet
With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
Set wksTZ = Worksheets("TZ")
Set wksMA = Worksheets("Mitarbeiteransicht")
Mitarbeiter = wksMA.Cells(2, 4)
With wksTZ
With .Range(.Cells(1, 1), .Cells(500, 1)) ' _
maximal 500 TZ-Einträge
Set c = .Find(Mitarbeiter, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
n = n + 1
ReDim Preserve myArray1(n)
myArray1(n) = c.Row
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address  firstAddress
End If
End With
End With 'wksTZ
MsgBox Join(myArray1, vbLf)
For Each i In myArray1
Erase myArray2
With wksTZ                          ' neu eingefügt
For Each c In .Range(.Cells(i, 4), .Cells(i, 8))
Select Case c
Case "x"
n = n + 1
ReDim Preserve myArray2(n)
If .Cells(1, c.Column).Value = "Mo" Then
Tag = 1
ElseIf .Cells(1, c.Column).Value = "Di" Then
Tag = 2
ElseIf .Cells(1, c.Column).Value = "Mi" Then
Tag = 3
ElseIf .Cells(1, c.Column).Value = "Do" Then
Tag = 4
ElseIf .Cells(1, c.Column).Value = "Fr" Then
Tag = 5
End If
myArray2(n) = Tag '.Cells(1, c.Column).Value
End Select
Next
End With                                ' neu eingefügt
MsgBox Join(myArray2, vbLf)
With wksMA
j = 1
Do While j = CDate(wksTZ.Cells(i, 2)) _
And CDate(c)  5 Then _
.Cells(c.Row, c.Column + 1) = ""
If FT_Vergleich(CDate(c)) = True Then _
.Cells(c.Row, c.Column + 1) = ""
End Select
Next c
j = j + 3
Loop
End With 'wksMA
Counter_Übertrag = Counter_Übertrag + 1
Next i
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With
End Sub

Anzeige
AW: Laufzeitfehler 91
21.03.2020 09:11:10
fcs
Hallo FifiFox,
dann stimmt ggf bei einem der in der Zeile benutzten Werte etwas nicht.
Datum oder Name wurde nicht gefunden, oder die Zelle mit dem einzutragende Wetrt enthält einen Fehlerwert.
Baue entsprechende Prüfungen ein.
          If IsError(c.Value) Then
MsgBox "Die Zelle """ & c.Address(False, False, xlA1) _
& """ enthält einen Fehlerwert!", _
vbOKOnly, "Makro: Übertrag_MA_Urlaub"
wksUrlaub.Cells(Name_n.Row, Datum.Column) = "#Fehler!"
ElseIf Name_n Is Nothing Then
MsgBox "Name """ & Name & """ in Blatt """ & wksUrlaub.Name _
& """ nicht gefunden!", _
vbOKOnly, "Makro: Übertrag_MA_Urlaub"
ElseIf Datum Is Nothing Then
MsgBox "Datum """ & Suchen & """ in Blatt """ & wksUrlaub.Name _
& """ nicht gefunden!", _
vbOKOnly, "Makro: Übertrag_MA_Urlaub"
Else
wksUrlaub.Cells(Name_n.Row, Datum.Column) = c.Value   ' hier kommt der Fehler
End If

LG
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige