
IIf(), es una función muy cómoda de vb, pero no es recomendable usarla en bucles o si se necesita especial agilidad porque es leeeenta.

La mía funciona exactamente igual, con la ventaja de que los argumentos en caso de ser Falso o Verdadero son opcionales.

Código
Option Explicit
Public Static Function IIfEx(ByVal bolExpresion As Boolean, _
Optional ByRef varTruePart As Variant, _
Optional ByRef varFalsePart As Variant) As Variant
If bolExpresion Then
IIfEx = varTruePart
Else
IIfEx = varFalsePart
End If
End Function
Un pequeño ejemplo de velocidad usando CTiming.cls :
Código
Option Explicit
Private Sub Form_Load()
Dim t As New CTiming
Dim x As Long
Dim ret As Variant
Const s As String = "holaa"
Const sCorrect As String = s
Const sIncorrect As String = sCorrect & "a"
Const lngLoops As Long = 100000
If App.LogMode = 0 Then
MsgBox "Compile it stupid!", vbCritical
End
End If
Me.AutoRedraw = True
Me.Print "True part"
Me.Print
t.Reset
For x = 1 To lngLoops
ret = IIf((s = sCorrect), 123, 1233)
Next
Me.Print "IIf", t.sElapsed
t.Reset
For x = 1 To lngLoops
ret = IIfEx((s = sCorrect), 123, 1233)
Next
Me.Print "IIfEx", t.sElapsed
Me.Print String$(20, "-")
Me.Print "False part"
Me.Print
t.Reset
For x = 1 To lngLoops
ret = IIf((s = sIncorrect), 123, 1233)
Next
Me.Print "IIf", t.sElapsed
t.Reset
For x = 1 To lngLoops
ret = IIfEx((s = sIncorrect), 123, 1233)
Next
Me.Print "IIfEx", t.sElapsed
End Sub
Resultado (IIfEx = IIIf ; que le cambié el nombre
 ) :
) :

Nota: Aún así si se necesita especial velocidad mejor usar If.

DoEvents!



 
  




 Autor
 Autor
		




 En línea
									En línea
								



 
						
 
						