Anzeige
Archiv - Navigation
1948to1952
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

Loop stopt nicht

Loop stopt nicht
02.10.2023 08:32:01
Andreas
Hallo,

mit folgenden Macro vergleiche ich einen Textinhalt in "Tabelle 73 Zelle R51". Es hat nur noch paar kleine Bug's.

https://www.herber.de/bbs/user/163208.xlsm

1. Ist kein Text vorhanden, oder er findet ihn nicht, dann hängt sich die Schleife auf. Eigentlich soll die MsgBox "keine Eigenschaft zuordbar " angezeigt werden- und das Makro stoppen.
2. Beim Eingabewort " Scanner" stoppt das Macro nicht- und arbeitet weitere Prozeduren ab. Wird hingegen ein anderer Text aus der gleichen Vergleichsspalte eingetragen- stoppt das Makro. Z.B " Kopierer "



Wo könnten die Fehler sein?



Option Explicit


Sub Makro_Vergleich()

Dim d As Range
Dim firstAddress As String
With Tabelle73.Range("Q58:AF196")

Set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues)


If Not d Is Nothing Then
firstAddress = d.Address
Do
Select Case d.Column
Case Is = 17

MsgBox "Schutzleiter"
'CMD_Schutzleiter
Case Is = 20

MsgBox "Schutzisoliert"
'CMD_Schutzisoliert

Case Is = 26

MsgBox "Sicht"
'CMD_Nur_Sichtprüfung


Case Is = 29

MsgBox "Halt - Stopp Auswahl Eigenschaft"


Case Is = 32
MsgBox "nicht meßbar"
'CMD_nicht_meßbar

Case Is = 23

MsgBox "Schutzart händig wählen"
'Öffne_UF10_Page02




'''und hier will er nicht..................................................


Case Else




MsgBox "keine Eigenschaft zuordbar "
''''.........................................................................

End Select
Set d = .FindNext(d)


Loop While Not d Is Nothing And d.Address > firstAddress
End If
End With


End Sub


Gruß Andreas

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Loop stopt nicht
02.10.2023 09:15:09
GerdL
Moin Andreas!

a) Fehlender Suchbegriff:
If Not IsEmpty(Tabelle73.Range("R51")) Then

Set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues)
End If


b) Es ist nicht ersichtlich, was deine weiteren Makros, mit Call innerhalb der Schleife, bewirken.

Gruß Gerd
AW: Loop stopt nicht
02.10.2023 10:09:54
Andreas

Hallo Gerd, die weiteren Makros, mit Call bewirken eigentlich innerhalb der Schleife nicht sehr viel. Z.B. nur Zellen mit Inhalt befüllen.

Daran liegt es auch nicht- das Makro_Vergleich() macht ja die gleichen Fehler in der Beispielmappe.

Wird dort "Scanner" eingegeben hängt sich die Schleife auf.


Sub CMD_Defekt()



''CommandButton97_Click() ' CMD Defekt

With UserForm100



Cells(ActiveCell.Row, 6).Resize(1, 12).ClearContents ' löschen von Zellen
Cells(ActiveCell.Row, 11).Value = Worksheets("Auswertung").Range("AU14") 'Inhalt übergeben
Cells(ActiveCell.Row, 12).Value = Worksheets("Auswertung").Range("BA14")
End With


End Sub


Sub CMD_Nur_Sichtprüfung()



''CommandButton96_Click() ' CMD Nur Sichtprüfung

With UserForm100


Cells(ActiveCell.Row, 6).Resize(1, 12).ClearContents ' löschen von Zellen
Cells(ActiveCell.Row, 6).Value = Worksheets("Auswertung").Range("AU13") 'Inhalt übergeben
Cells(ActiveCell.Row, 11).Value = Worksheets("Auswertung").Range("AZ13")
Cells(ActiveCell.Row, 12).Value = Worksheets("Auswertung").Range("BA13")
End With


End Sub



Gruß Andreas
Anzeige
AW: Loop stopt nicht
02.10.2023 09:34:16
ralf_b
zusätzlich fehlt für dieses if ein else wenn nichts gefunden wurde
 If Not d Is Nothing Then


und in den Beispieldaten ist z.b "Netzteil Tischleuchte" bei Schutzisoliert und bei Händig eingetragen. Ein Versehen?
AW: Loop stopt nicht
02.10.2023 10:15:15
Andreas
Das war ein Versehen.... sollte nur einmal in derr Suchmaske vorkommen.

Doppel-Ergebnise sind nicht gewünscht und werden auch nicht vorkommen.



  • Netzteil Tischleuchte
  • doppelte einträge
    02.10.2023 10:37:19
    ralf_b
    da gibt es noch Andere. Für die Erarbeitung einer Lösung ist eine saubere Beispieldatei sehr wichtig. In diesem Fall produzierst du hier Aufwand beim Helfer, der nicht sein müßte. Die Zeit kann man auch anders nutzen. z.b für deine nächste Frage.
    Anzeige
    AW: nun vergleicht das Makro ....
    02.10.2023 10:37:55
    Andreas
  • Netzteil Scanner


  • Diesen Eintrag habe ich "Händig" entfernt- und schon ordnet er mir den "Scanner" richtig ein.

    ---Netzteil Scanner wird gestrichen!---

    Habe noch ein "Exit Sub" gesetzt und schon läuft das Teil...

    Option Explicit
    

    Sub Makro_Vergleich()

    Dim d As Range
    Dim firstAddress As String
    With Tabelle73.Range("Q58:AF196")

    Set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues)


    If Not d Is Nothing Then
    firstAddress = d.Address
    Do
    Select Case d.Column
    Case Is = 17

    MsgBox "Schutzleiter"
    'CMD_Schutzleiter
    Case Is = 20

    MsgBox "Schutzisoliert"
    'CMD_Schutzisoliert

    Case Is = 26

    MsgBox "Sicht"
    'CMD_Nur_Sichtprüfung


    Case Is = 29

    MsgBox "Halt - Stopp Auswahl Eigenschaft"


    Case Is = 32
    MsgBox "nicht meßbar"
    'CMD_nicht_meßbar

    Case Is = 23

    MsgBox "Schutzart händig wählen"
    'Öffne_UF10_Page02


    Case Else



    MsgBox "keine Eigenschaft zuordbar "

    Exit Sub



    End Select
    Set d = .FindNext(d)


    Loop While Not d Is Nothing And d.Address > firstAddress
    End If
    End With




    End Sub
    Anzeige
    AW: nun vergleicht das Makro ....
    02.10.2023 10:43:58
    ralf_b
    set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues)
    hier solltest du den zweiten Parameter mit setzen. lookat=Xlwhole damit wird sichergestellt das nicht nur ein Teil des Zellinhaltes gefunden wird. Find vergleicht dann den gesamten Zellinhalt.
    AW: nun vergleicht das Makro ....
    03.10.2023 21:56:37
    Yal
    Moin,

    Leerzeilen im Code macht der Code nicht leichter zu lesen, im Gegenteil.
    Wenn ein Treffer gefunden wurde (Anweisung von Gerd und Ralf beachten), wird mit FindNext mindestens diese Treffer wiedergefunden. Daher ist der Not d Is Nothing in dem Loop While nicht nötig.

    Sub Makro_Vergleich()
    
    Dim d As Range
    Dim firstAddress As String

    With Tabelle73.Range("Q58:AF196")
    Set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues)
    If Not d Is Nothing Then
    firstAddress = d.Address
    Do
    Select Case d.Column
    Case 17: MsgBox "Schutzleiter" 'CMD_Schutzleiter
    Case 20: MsgBox "Schutzisoliert" 'CMD_Schutzisoliert
    Case 26: MsgBox "Sicht" 'CMD_Nur_Sichtprüfung
    Case 29: MsgBox "Halt - Stopp Auswahl Eigenschaft"
    Case 32: MsgBox "nicht meßbar" 'CMD_nicht_meßbar
    Case 23: MsgBox "Schutzart händig wählen" 'Öffne_UF10_Page02
    Case Else
    MsgBox "keine Eigenschaft zuordbar "
    Exit Sub
    End Select
    Set d = .FindNext(d)
    Loop While d.Address > firstAddress
    End If
    End With
    End Sub


    VG
    Yal
    Anzeige
    AW: nun findet und vergleicht das Makro .... Danke
    03.10.2023 22:06:39
    Andreas
    Danke Yal, Gerd und Ralf

    habe nun auch noch folgendes geändert - und denke es läuft so sauberer:

    Set d = .Find(Tabelle73.Range("R51").Text, LookIn:=xlValues, LookAt:=xlWhole)



    Gruß Andreas

    noch was...
    03.10.2023 22:10:45
    ralf_b
    du benötigst keine Do loop schleife wenn es nur eine Messung pro Gerät gibt. Zumindest habe ich das so verstanden.
    Die Schleife ist nur nötig wenn man mehrere Messungen für ein Gerät finden möchte.
    AW: noch was...
    03.10.2023 22:17:31
    Andreas
    Ok ralf_b

    ok dann nehme ich den Loop raus. Es reicht ein Durchlauf.

    Gruß Andreas

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige