Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91

Forumthread: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91

kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
04.07.2025 17:12:54
AniLH
Hallo zusammen!

Zu meiner Fragestellung habe ich ein paar Antworten gefunden, aber nicht das was ich suche.

Ich möchte einen bestimmten Ausdruck ,in meinem Fall Formeln die "Diamant" enthalten, durch ihren Zellwert ersetzen.
Ich habe dafür folgendes Makro geschrieben, dass bis kurz vor dem Ende auch super funktioniert, dann aber mit der Fehlermeldung Laufzeitfehler `91`: Objektvariable oder With-Blockvariable nicht festgelegt endet. Schiebe ich den Cursor per Hand wieder auf die Zeile "Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)" dann funktioniert es einwandfrei. Hat wahrscheinlich damit zu tun, dass das Makro nicht den ersten Eintrag (in diesem Bsp ist in der Zelle L42 auch die erste zu ersetzende Formel), nimmt, sondern L45 (den zweiten Eintrag mit Formel). Ich kann mich hier auch total irren, da ich die Funktionen nicht zu 100 % durchdringe...
Vielleicht kann mir hier jemand helfen, dass würde meine Arbeit für die kommende Wirtschaftsplanung total erleichtern :-) Die Diamantformeln sind super, bei Präsentationen an anderen Rechnern neigen Sie aber dazu "..." Werte anzuzeigen und müssten einmal komplett neu gelesen werden (nicht jeder Rechner hat nötigen Voraussetzungen und es dauert auch ewig).

Hier das Makro:

Public Sub DiamantWerte()
Const strFunction As String = "Diamant"
Dim C As Range, firstAddr As String
Dim rngSearch As Range
Set rngSearch = [L42:L48]
With rngSearch
Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)
If Not C Is Nothing Then
firstAddr = C.Address
Do
C = C.Value
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address > firstAddr ---- Hier kommt ganz am Ende, wenn im ganzen Bereich alles Ersetzt wurde die Fehlermeldung. C ist dann auch = Nothing
End If
End With

End Sub

Vielen lieben Dank, falls mir jemand das Brett vorm Kopf entfernen kann!!
AniLH
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
04.07.2025 17:30:52
daniel
Hi
lass das mit dem .FindNext.
das ist kompliziert und wird auch häufig falsch gemacht.

probiere es mal einfach so:

dim Zelle as Range

for each Zelle in Range("L42:L48")
if Zelle.Formula like "=*Diamant*" then Zelle.Formula = Zelle.Value
next


Gruß Daniel
Anzeige
AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
04.07.2025 17:57:07
daniel
um den Fehler zu zeigen:

wenn man mit .FindNext alle Zellen finden will, die einer bestimmten Bedingung entsprechen, dann gibt es zwei möglichkeiten:

a) man verändert die Zelle in Bezug auf die Bedingung NICHT,
dann wird das FindNext irgendwann wieder die erste Zelle finden und dann braucht man als Abbruchbedingung das mit der FirstAdress
die Abfrage auf "is Nothing" wird hier nur beim Einstieg benötigt, aber nicht mehr in der Schleife, weil des gar nicht vor kommen kann, dass .FindNext nichts findet, wenn das initiale .Find erfolgreich war
Loop While C.Address > firstAddr


b) man verändert die Zelle in Bezug auf die Bedinung.
dann tritt irgendwann der Fall ein, dass das FindNext nichts findet und Nothing zurück gibt, dann prüft man so:
Loop While Not C Is Nothing 

dann kann man sich aber das ganze mit der FirstAdress sparen und gleich so viel kompakter programmieren:
With rngSearch

Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)
Do Until C Is Nothing
C = C.Value
Set C = .FindNext(C)
Loop
End With


oder dann auch ohne .FindNext:
With rngSearch

Do
Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)
if C is nothing then exit do
C = C.Value
Loop
End With


sollte man sich nicht sicher sein, was genau passiert und beide Fälle abdecken wollen, dann muss man sich im klaren sein, dass man auf einen Fehler läuft, wenn man Is Nothing und .Address in eine Programmzeile packt, denn wenn Is Nothing zutrifft, kann man die .Address nicht abfragen.
soll beides berücksichtigt werden, muss man die Programmzeilen trennen und dafür sorgen, dass das .Address nicht ausgeführt wird, wenn Is Nothing zutrifft:

Public Sub DiamantWerte()

Const strFunction As String = "Diamant"
Dim C As Range, firstAddr As String
Dim rngSearch As Range
Set rngSearch = [L42:L48]
With rngSearch
Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)
If Not C Is Nothing Then
firstAddr = C.Address
Do
C = C.Value
Set C = .FindNext(C)
if C is Nothing then Exit Do
if C.Address = firstAddr then Exit Do
Loop
End If
End With

End Sub


Gruß Daniel
Anzeige
AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
07.07.2025 12:08:53
AniLH
Hallo Daniel!

Vielen, vielen Dank für diese ausführliche Erklärung!!
Dein erster Beitrag hat mich zur Lösung gebracht, aber dann hätte ich nicht verstanden warum das nicht funktioniert hat. So hab ich noch was mitnehmen können.

Herzlichen Dank!!!!
Anita

AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
04.07.2025 22:12:11
Piet
Hallo

Loop While Not C Is Nothing And C.Address > firstAddr
Ich verwende diesen Code: --> Loop Until C.Address = firstAddr

mfg Piet
Anzeige
AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
05.07.2025 11:04:25
GerdL
Hallo AniLH!

Public Sub DiamantWerte_2()


Const strFunction As String = "Diamant"

Dim C As Range, firstAddr As String
Dim rngSearch As Range
Dim rngFound As Range, X As Range

Set rngSearch = Range("L42:L48")
With rngSearch
Set C = .Find(strFunction, LookIn:=xlFormulas, lookat:=xlPart)
If Not C Is Nothing Then
firstAddr = C.Address
Set rngFound = C
Do
Set rngFound = Union(rngFound, C)
Set C = .FindNext(C)
Loop Until C.Address = firstAddr
For Each X In rngFound.Cells
X = X.Value
Next
End If
End With

End Sub


Bei nur sieben auszuwertenden Zellen ist die Prozedur etwas überdimensioniert.

Gruß Gerd
Anzeige
AW: kein Schleifenabbruch am Ende der Loop Durchgänge: Fehler 91
07.07.2025 11:14:48
AniLH
Hallo Gerd,

da gebe ich dir recht! Aber in echt reden wir hier von 20 Tabellenblättern mit mindestens 1.500 Formeln und das mal vier Gesellschaften... :-)

Ich wollte es für meinen Test nur nicht unnötig in die Laufzeitlängen ziehen, weil ich ja erstmal nur sehen wollte ob es überhaupt funktioniert :-)

Ich schaue mir jetzt eure Lösungen mal in Ruhe an, auf jeden Fall ein großes Dankeschön für die Antwort!!

Gruß
Anita
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige