If-Abfrage
Betrifft: If-Abfrage
von: Franz W.
Geschrieben am: 12.10.2014 10:11:14
Guten Morgen Fachleute,
ich möchte in einer einzigen If-Abfrage gleichzeitig zwei Dinge abfragen, krieg das aber nicht hin:
- es geht um eine Menge von Zellen
- einige haben einen Kommentar, aber nicht alle
- es soll geprüft werden, ob in der Zelle ein bestimmter Begriff zu finden ist
- in den Zellen, die einen Kommentar haben, soll zusätzlich geprüft werden, ob dieser Begriff im Kommentar enthalten ist
Ich dachte ich könnte das so lösen:
with cells(t,m)
If .Value Like "*(xyz)*" Or Not .Comment Is Nothing And .Comment.Text Like "*(xyz)*" Then
Das klappt aber nur bei Zellen MIT Kommentar. Bei Zellen OHNE Kommentar gibt's eine Fehlermeldung.
Läßt sich das nicht in einer Abfrage kombinieren? Oder wie kann ich's schreiben, dass es funktioniert? Dazu bitte ich um Eure Hilfe
Danke schonmal und Grüße
Franz
Betrifft: AW: If-Abfrage
von: Hajo_Zi
Geschrieben am: 12.10.2014 10:12:53
Hallo Franz,
du musst vorher prüfen ob Kommentar.
oder mit not Isrror()
Ich baue nichts nach.

Betrifft: AW: If-Abfrage
von: Franz W.
Geschrieben am: 12.10.2014 10:15:46
Hallo Hajo,
ja, ich weiß, dass ich vorher auf einen Kommentar prüfen muss. Und das tue ich ja auch in der Abfrage. Aber es geht so nicht.
Grüße
Franz
Betrifft: Mehrere If-Blöcke
von: {Boris}
Geschrieben am: 12.10.2014 10:30:56
Hi,
...Or Not .Comment Is Nothing And .Comment.Text Like "*(xyz)*" Then
Wenn kein Kommentar vorhanden ist (Not.Comment Is Nothing), dann kannst Du in der selben Prüfung nicht den Text auslesen.
Also nach diesem Prinzip:
If Not .Comment Is Nothing Then
If .Comment.Text Like .... Then
'Machwas
End If
End If
VG, Boris
Betrifft: AW: Mehrere If-Blöcke
von: Franz W.
Geschrieben am: 12.10.2014 10:39:35
Hallo Boris,
ja, hab's schon so befürchtet: ich muss das also zweimal prüfen, seh ich das richtig?
Einmal für:
If .Value Like "*(xyz)*"
Und dann nochmal für
If Not .Comment Is Nothing Then
If .Comment.Text Like .... Then
'Machwas
End If
End If
Die Sache ist die, dass nach der Abfrage ein Rattenschwanz von Anweisungen -Machwas- folgt. Und den wollte ich nicht zweimal schreiben müssen.
Danke und Grüße
Franz
 |
Betrifft: AW: Mehrere If-Blöcke
von: {Boris}
Geschrieben am: 12.10.2014 10:43:53
Hi Franz,
ich muss das also zweimal prüfen, seh ich das richtig?
Genau. Wenn also - in Deinem Fall - eine Objektprüfung FALSCH ist (es ist also kein Kommentar vorhanden), dann darfst Du nicht innerhalb der selben Prüfung eine Eigenschaft (hier: Text) des Objektes abfragen, da das Objekt ja gar nicht vorhanden ist. Logisch, dass es eine Fehlermeldung gibt.
Machst Du das hingegen in Blöcken, wird die Text-Abfrage "übersprungen", wenn eben kein Kommentar vorhanden ist.
VG, Boris
Betrifft: AW: Mehrere If-Blöcke
von: Franz W.
Geschrieben am: 12.10.2014 10:45:59
Hallo Boris,
gut, hab's kapiert....
Vielen Dank und viele Grüße Dir
Franz
Betrifft: Code nicht zweimal schreiben, ...
von: Christian
Geschrieben am: 12.10.2014 10:58:17
Hallo Franz,
Die Sache ist die, dass nach der Abfrage ein Rattenschwanz von Anweisungen -Machwas- folgt. Und den wollte ich nicht zweimal schreiben müssen.
Da gibt es verschiedene Wege.
Denn es macht sicher keinen Sinn einen Code zweimal zu schreiben. Wenn du dann was änderst, musst du das immer 2 mal ändern. Das ist sehr fehlerträchtig.
Du kannst zB. bei deinen IF-Afragen jeweils eine Boolean-Variable auf True setzen.
Und nach den IF-Afragen:
If blnFnd = True Then
' dein Rattenschwanz von Anweisungen
End If
oder du lagerst deine Anweisungen aus und rufst diese Prozedur in den IF-Afragen auf
Call MeineAnweisungen
oder ...
Gruß
Christian
 |
Betrifft: AW: Code nicht zweimal schreiben, ...
von: Franz W.
Geschrieben am: 12.10.2014 11:03:35
Hallo Christian,
ja, danke, das mit dem Problem bei Änderungen, wenn der Code zweimal geschrieben ist, ist mir auch schon gekommen. U. a. deshalb wollte ich das auf ein Mal abfragen.
Aber die Idee mit der boolschen Variablen find ich genau richtig, das gefällt mir gut - genau das werd ich machen!!
Vielen Dank dafür und viele Grüße
Franz
Betrifft: ohne Mehrfach-Rattenschwanz
von: Erich G.
Geschrieben am: 12.10.2014 11:00:55
Hi Franz,
beim "If" kannst du nicht viel sparen, wohl aber beim "Rattenschwanz".
So etwa nach diesem Muster:
Sub abcde()
With Cells(3, 4)
If .Value Like "*(xyz)*" Then
DoIt
ElseIf Not .Comment Is Nothing Then
If .Comment.Text Like "*(xyz)*" Then DoIt
End If
MsgBox .Comments.Count
End With
MsgBox Cells(1, 1).Comments.Count
End Sub
Sub DoIt()
MsgBox "DoIt"
' und der Rest des Rattenschwanzes...
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und:
Schönen Restsonntag allerseits!
Betrifft: ohne Mehrfach-Rattenschwanz - nochmal ohne Fehler
von: Erich G.
Geschrieben am: 12.10.2014 11:02:27
Hi Franz,
beim "If" kannst du nicht viel sparen, wohl aber beim "Rattenschwanz".
So etwa nach diesem Muster:
Sub abcde()
With Cells(3, 4)
If .Value Like "*(xyz)*" Then
DoIt
ElseIf Not .Comment Is Nothing Then
If .Comment.Text Like "*(xyz)*" Then DoIt
End If
End With
End Sub
Sub DoIt()
MsgBox "DoIt"
' und der Rest des Rattenschwanzes...
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und:
Schönen Restsonntag allerseits!
Betrifft: AW: ohne Mehrfach-Rattenschwanz - nochmal ohne Fehler
von: Franz W.
Geschrieben am: 12.10.2014 11:12:55
Hallo Erich,
ja, danke auch Dir! Jetzt hab ich verschiedene Möglichkeiten zur Auswahl, so kann ic h's auch machen.
Vielen Dank und Grüße
Franz
Betrifft: nochmal Danke Euch allen! .......
von: Franz W.
Geschrieben am: 12.10.2014 13:09:19
...... es funktioniert einwandfrei!!
Beste Grüße
Franz