Do Until Loop InputBox infinitamente loops

Estoy creando una macro de probabilidad donde el usuario ingresa el número de jugadores en un juego de cartas. Si ingreso string (por ejemplo, Joe ), no integer (por ejemplo, 15.67 ) o integer menor que 0 (por ejemplo, -25 ), InputBox debería crear un bucle. Sin embargo, los integers mayores que 0 deben terminar el ciclo. (Tengo que forzar matar a Excel para detener el InputBox independientemente de la input del usuario).

Quiero que InputBox cierre / salga de Sub una vez que se ingresa un integer mayor que 0. ¿Qué estoy haciendo mal aquí?

 Sub GenerateCards() Players = InputBox("How many players? Please enter an integer.") Do Until TypeName(Players) = "Integer" And Players > 0 ' why does this loop even if both conditions are met (ex, Players=5?) Players = InputBox("How many players? Please enter an integer.") Loop End Sub 

InputBox() siempre devuelve una cadena, por lo que TypeName() siempre devolverá "String" .

Pero puedes probar si la cadena que se devuelve es un número integer. Primero, puede usar IsNumeric() para probar si la cadena es un valor numérico. Entonces, puedes lanzarlo de forma segura a un Double o un Integer . De hecho, puedes lanzarlo a ambos y luego compararlos uno contra el otro. Si son iguales, tienes un valor integer. Por ejemplo:

 Sub GenerateCards() Do Players = InputBox("How many players? Please enter an integer.") If IsNumeric(Players) Then If CDbl(Players) = CLng(Players) And Players > 0 Then ' Integer > 0 entenetworking. Exit loop... Exit Do End If End If Loop End Sub