Beschränkungen bei IIF (EX97)

25/03/2008 - 12:54 von Eric March | Report spam
Moin, Moin!

Um Spaltennummern (wir bewegen uns hier nur im Bereich 1-256) als
Buchstabe(n) zurückzubekommen ersann ich diese Function

Public Function NUMzuABC(Spalte As Integer) As String
NUMzuABC = _
IIf( _
(Spalte - 1) \ 26 = 0, _
Chr(64 + Spalte), _
Chr(64 + (Spalte - 1) \ 26) & Chr(65 + (Spalte - 1) Mod 26) _
)
End Function

Das scheitert bei Spalte 192 (GI) »unzulàssiger Prozeduraufruf oder
unzulàssigens Argument« (Laufzeitfehler 5).

Ein normales IF eingebaut…
If (Spalte - 1) \ 26 = 0 Then
NUMzuABC = Chr(64 + Spalte)
Else
NUMzuABC = Chr(64 + (Spalte - 1) \ 26) & Chr(65 + (Spalte - 1) Mod 26)
End if
…funktioniert aber einwandfrei.

Woran um Gottes Willen scheitert da IIF?
An der Ganzzahldivision in der Bedingung? Offenbar nein - ‹IIF
(Spalte<27, […])› arbeitet noch.
Und der geànderte letzte Term ‹& (65 + (Spalte - 1) Mod 26)› wird in der
Form sauber ausgeführt, mit dem CHR davor gibt es den Unfall. Mag IIF
denn vielleicht keine Modulos?
Auch nicht. Setze ich nàmlich die ganze ›Nein‹-Funktion in Klammern
funktioniert alles einwandfrei. Also passt IIF vielleicht das & nicht?

Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi
 

Lesen sie die antworten

#1 stefan onken
25/03/2008 - 14:09 | Warnen spam
On 25 Mrz., 12:54, Eric March <"Eric March"> wrote:
Moin, Moin!

Um Spaltennummern (wir bewegen uns hier nur im Bereich 1-256) als
Buchstabe(n) zurückzubekommen ersann ich diese Function

Public Function NUMzuABC(Spalte As Integer) As String
  NUMzuABC = _
   IIf( _
   (Spalte - 1) \ 26 = 0, _
   Chr(64 + Spalte), _
   Chr(64 + (Spalte - 1) \ 26) & Chr(65 + (Spalte - 1) Mod 26) _
   )
End Function

Das scheitert bei Spalte 192 (GI) »unzulàssiger Prozeduraufruf oder
unzulàssigens Argument« (Laufzeitfehler 5).

Ein normales IF eingebaut…
  If (Spalte - 1) \ 26 = 0 Then
   NUMzuABC = Chr(64 + Spalte)
  Else
   NUMzuABC = Chr(64 + (Spalte - 1) \ 26) & Chr(65 + (Spalte - 1) Mod 26)
  End if
…funktioniert aber einwandfrei.

Woran um Gottes Willen scheitert da IIF?
An der Ganzzahldivision in der Bedingung? Offenbar nein - ‹IIF
(Spalte<27, […])› arbeitet noch.
Und der geànderte letzte Term ‹& (65 + (Spalte - 1) Mod 26)› wird in der
Form sauber ausgeführt, mit dem CHR davor gibt es den Unfall. Mag IIF
denn vielleicht keine Modulos?
Auch nicht. Setze ich nàmlich die ganze ›Nein‹-Funktion in Klammern
funktioniert alles einwandfrei. Also passt IIF vielleicht das & nicht?

Eric March

Kenne die Vergangenheit. In der Unwissenheit über die Vergangenheit
liegt das Verderben der Zukunft.
"Die Geschichte ist der beste Lehrmeister - mit den unaufmerksamsten
Schülern." Indira Gandhi



hallo Eric,
in der Hilfe zu Iif steht, dass sowohl Truepart als auch Falsepart
ausgewertet werden. Der Truepart sorgt hier mE für den Fehler, bei
Spalte 2 steht im truepart Chr(256), und das ist ausserhalb des
Bereiches von Chr(). Entweder du nimmst deine If-Funktion der aber

Public Function NUMzuABC(Spalte As Integer) As String
NUMzuABC = WorksheetFunction.Substitute(Cells(1, Spalte).Address(0,
0), 1, "")
End Function


Gruß
stefan

Ähnliche fragen