es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo DETENER que VBA interprete los argumentos de una función entera como booleanos si el entero es 0 o -1.

Por favor, revisa el código que he publicado a continuación. Aísla el problema de manera más concisa.

Estoy tratando de capturar un error de argumento, es decir, si el usuario de Excel coloca un booleano en lugar de intTestVar que debería ser un entero. VBA interpreta una entrada de 0 o -1 (lo cual es válido) como un booleano. Si el usuario ingresa un booleano (no válido), lo interpreta como un entero, es decir, -1 o 0. Entiendo que si conviertes un booleano a un entero, será -1 o 0, pero no lo estoy convirtiendo.

Option Explicit

Public Function TestA(filler As Integer, Optional intTestVar As Integer = 0) As Integer
    Dim intTrap As Integer
    intTrap = 0

    On Error GoTo ErrorH

    Debug.Print "cómo VBA ve la variable de argumento " & intTestVar & " type = " & VarType(intTestVar)

    If VarType(intTestVar) = vbBoolean Then
        intTrap = 1
        GoTo ErrorH
    End If

    'en caso de que eso no funcione
    If intTestVar = False Or intTestVar = True Then
        intTrap = 2
        GoTo ErrorH
    End If

    'en caso de que eso no funcione
    If IsNumeric(intTestVar) = False Then
        intTrap = 3
        GoTo ErrorH
    End If

    TestA = 10 * intTestVar

    Exit Function

ErrorH:
    Debug.Print intTrap & " Atrapó al Bicho "
    Resume Next
End Function

Esto es cómo respondió a diferentes valores para intTestVarfiller es solo un valor ficticio = 5

Ingresando 6 devuelve 60
cómo VBA ve la variable de argumento 6 type = 2

Ingresando -1 devuelve 0
cómo VBA ve la variable de argumento -1 type = 2
2 Atrapó al Bicho
2 Atrapó al Bicho

Ingresando True devuelve 0
cómo VBA ve la variable de argumento -1 type = 2
2 Atrapó al Bicho
2 Atrapó al Bicho

Ingresando False devuelve 0
cómo VBA ve la variable de argumento 0 type = 2
2 Atrapó al Bicho
2 Atrapó al Bicho

Como dato adicional, no sé por qué el controlador de errores repite el mensaje de error. Resume Next debería limpiar el error…??

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basado en el código proporcionado, la función TestA intenta capturar un error de argumento cuando el usuario de Excel ingresa un valor booleano en lugar de un entero para intTestVar. El código utiliza las funciones VarType e IsNumeric para verificar el tipo de intTestVar y determinar si es válido. Sin embargo, parece que el código no está capturando correctamente el error, ya que el controlador de errores repite el mensaje de error. La razón exacta de este comportamiento no está clara sin más contexto.

Comments are closed.