Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1256to1260
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

do while mit oder

do while mit oder
mehmet
Hallo Forum,
ich möchte das Makro:
'"COMMENTS:"
Dim rngCOM As Range, iCom As Long
For iCom = 26 To 300 '11 wurde 26
If left$(Cells(iCom, 20), 9) = "COMMENTS:" Then
Set rngCOM = Cells(iCom, 16)
Do While rngCOM  "F " Or rngCOM  "C " Or rngCOM  "D "
Set rngCOM = rngCOM.Offset(-1)
Loop
Cells(iCom, 20).Cut rngCOM.Offset(, 4)
End If
Next iCom
mit den Bedingungen nicht nur "F " sondern auch mit "C " oder "D " machen
Leider bricht mir das Makro genau da ab.
Leider geht es so nicht:
      Do While rngCOM  "F " Or rngCOM  "C " Or rngCOM  "D "
Was koennte ich noch versuchen
Herzlichen Dank
Gruss
mehmet

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

Betreff
Benutzer
Anzeige
besser ohne Loop
22.03.2012 01:36:16
Erich
Hi Mehmet,
überleg mal kurz, ob

rngCOM  "F " Or rngCOM  "C "
überhaupt jemals falsch sein kann.
Wenn da ein X drinsteht, ist es ungleich "F " - also: WAHR
Wenn da ein F drinsteht, ist es ungleich "C " - also: WAHR
Wenn da ein C drinsteht, ist es ungleich "F " - also: WAHR
Wenn es leer ist, ist es ungleich "F " - also: WAHR
Das bedeutet für deinen Code, dass der Loop unendlich lange laufen möchte.
Er endet mit einem Fehler (den du hier hättest beschreiben sollen), wenn in Spalte A versucht wird:
Set rngCOM = rngCOM.Offset(-1)
Dann soll rngCOM gleich einer Zelle links von Spalte A gesetzt werden. Rummms.
Wenn sicher ist, dass da ein F, C oder D gefunden werden, kannst du es mal mit

Do While rngCOM  "F " and rngCOM  "C " and rngCOM  "D "
versuchen, also mit And statt Or.
Oder du machst das so (ungetestet!):

Option Explicit
Sub aTest()
'"COMMENTS:"
Dim lngZ As Long, lngS As Long
For lngZ = 26 To 300 '11 wurde 26
If Cells(lngZ, 20) Like "COMMENTS:*" Then
For lngS = 16 To 1 Step -1
Select Case Cells(lngZ, 16)
Case "F ", "C ", "D ":  Exit For    ' Treffer, Ende
Case Else                           ' weiter
End Select
Next lngS
' wenn Treffer war
If lngS > 0 Then Cells(lngZ, 20).Cut Cells(lngZ, lngS + 4)
End If
Next lngZ
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: besser ohne Loop
23.03.2012 00:49:59
mehmet
Hallo Erich,
herzlichen Dank für deine Antwort.
Mit den einfachen Dingen wie "and" oder "or" bin ich noch nicht ganz vertraut.
Jetzt wo du es mir sagst macht es sinn 8-)
Ich habe mal dein Ansatz angewendet. Es läuft aber macht nicht was es soll (schneiden/einfügen).
Die ursrüngliche Frage anfrage war hier (mit Datei als Beispiel):
https://www.herber.de/forum/archiv/1252to1256/t1255156.htm
In Splate kann also "F " oder "C " oder "D " stehen
Herzlichen Dank
Gruss
mehmet
AW: besser ohne Loop
23.03.2012 01:06:41
mehmet
Hallo Erich,
Franz's Musterbeispiel läuft soweit.
Gruss
mehmet
Anzeige
jetzt klarer
23.03.2012 05:54:47
Erich
Hi Mehmet,
warum hast du uns nicht gleich am Anfang den Hinweis auf den alten Thread gegeben?
Nur dort hast du erklärt, was passieren soll.
Aus deinem ersten Beitrag hier wurde uns beiden nicht klar, was du mit dem Code genau bezweckst.
Das sollte es nun auch tun:

Sub abTest()                                ' "COMMENTS:"
Dim tt As Long, pp As Long
For tt = 26 To 300 '11 wurde 26
If Cells(tt, 20) Like "COMMENTS:*" Then
For pp = tt To 1 Step -1
Select Case Cells(pp, 16)     ' Suche in Spalte P
Case "F ", "C ", "D ":  Exit For ' Treffer, Ende
End Select
Next pp
Select Case pp
Case 0
MsgBox "Kein Treffer für COMMENTS-Zeile " & tt & " gefunden!"
Case tt
' dann ist nichts zu tun
Case Else                     ' wenn Treffer war
Cells(tt, 20).Cut Cells(pp, 20) ' verschiebt COMMENTS nach oben
End Select
End If
Next tt
End Sub
Nebenbei: Wenn F /C /D in der Zeile von COMMENTS gefunden wird, brauchts das Verschieben nicht.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: jetzt klarer
24.03.2012 00:21:46
mehmet
Hallo Erich,
sorry für die späte Rückmeldung.
Ich werde es ausprobieren und wenn ich noch Fragen haben sollte mich noch mal melden.
Herzlichen Dank für dein Verständnis bzgl des alten Thread
Gruss
mehmet
AW: do while mit oder
22.03.2012 02:09:02
fcs
Hallo mehmet,
wenn du 2 oder mehr Bedingungen "verschieden von etwas" mit Or verbindest, dann ist eine der Bedingungen immer erfüllt. Da läuft dein Makro dann bis in die Zeile 1 und dann kommt die Fehlermeldung Zeile 0 als Ziel zu setzen.
Du muss die Prüfunganders aufbauen. Zusätzlich ist eine Prüfung der Zeilen/Spaltennummer sinnvoll.
Gruß
Franz
Sub aaTest()
'"COMMENTS:"
Dim rngCOM As Range, iCom As Long
For iCom = 26 To 300 '11 wurde 26
If Left$(Cells(iCom, 20), 9) = "COMMENTS:" Then
Set rngCOM = Cells(iCom, 16)
Do While Not (rngCOM = "F " Or rngCOM = "C " Or rngCOM = "D ")
If rngCOM.Row = 1 Or rngCOM.Column = 1 Then
MsgBox "für Zeile 26 wurde kein Treffer gefunden!"
GoTo Next_iCom
End If
'? Willst du in der Zeile iCom oder in der Spalte 16 die Werte vergleichen
'Spalte 16: dann
'        Set rngCOM = rngCOM.Offset(-1)
'Zeile iCom: dann
Set rngCOM = rngCOM.Offset(0, -1)
Loop
Cells(iCom, 20).Cut rngCOM.Offset(0, 4)
End If
Next_iCom:
Next iCom
End Sub

Anzeige
AW: do while mit oder
23.03.2012 01:01:45
mehmet
Hallo Franz,
Dank Dir. Es funktioniert.
Es sollte Zeile Spalte 16 vergleichen
        Set rngCOM = rngCOM.Offset(-1)
Jetzt klappt es sehr gut.
Gruss
mehmet

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige