Excel vba formel falsch,Was?

4 Antworten

Suboptimierer hat natürlich recht, es macht Sinn, das auseinander zu "klamüsern".
Aber ich habe mal versucht möglichst nah an Deinem Entwurf zu bleiben um die Fehler erkennbar zu machen.
Vor allem ist IIF keine Worksheetfunction und akzeptiert offensichtlich auch kein OR.

Ich denke SO sollte es klappen, wie von Dir beabsichtigt:

Sub test()
 Worksheets("Tabelle1").Range("A1") = IIf((IsEmpty(Range("A1")) + IsEmpty(Range("B2"))) <> 0, "xxx", (Range("A1") - Range("B2") + 1))
End Sub

Oder?

iif(isempty(Range("A1")) or isempty(Range("B2")),"",Range("A1")-Range("B2")+1)

Sub test()

Worksheets("Tabelle1").Range("A1") = worksheetfunction.iif(or(isempty(Range(A1)),isempty(Range(B2)),""(Range(A1-B2+1))

End Sub

Meine Empfehlung: Zieh den Code auseinander. Alles in einer Zeile ist sehr unübersichtlich.

Sub test()
 If [a1] = "" Or [b2] = "" Then
  [a1] = ""
 Else
  [a1] = [a1] - [b2] + 1
 End If
End Sub

Suboptimierer  28.11.2019, 14:13

Ich habe mir einmal genauer deinen Code angeschaut. Willst du es unbedingt so lösen, gibt es einiges zu korrigieren:

  • Manche Zellebezüge fanden ohne Range statt
  • Manche Zellbezüge wurden nicht mit "" geklammert
  • Or als Worksheetfunction benötigt das Objekt vorweg
  • Bei IIf darf nicht Worksheetfunction stehen
  • Links vom Gleichheitszeichen referenzierst du mit Worksheets("Tabelle1"), rechts nicht.
  • Du hattest Klammern nicht richtig gesetzt
  • Hinter "" fehlte ein Komma

Mein Code:

Sub test2()
  Range("A1") = _
    IIf(WorksheetFunction.Or(IsEmpty(Range("A1")), IsEmpty(Range("B2"))), "", Range("A1") - Range("B2") + 1)
End Sub