Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

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.
GrußformelHomepage


  

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