Ya te he respondido en el mensaje anterior... aquí sólo quría corregirte acerca de la propiedad...
En un OCX las propiedades si han cambiado deben anunciarse para que las rutinas Readproperty y writeproperty actualicen correctamente los datos.
Si tu propiedad era:
Public Property Let A(ByVal vA As String)
If IsNumeric(vA) Then
If Val(vA) >= 0 And Val(vA) < 1000 Then
iA = vA
Else
iA = 1
End If
Else
iA = 1
End If
End Property
Debe quedar algo así como:
private p_ValorMax as integer ' almacena el valor de la propiedad ValorMax
Public Property Let ValorMax(ByVal v As integer)
if v>=0 and v<1000 then
p_ValorMax=v
PropertyChanged "ValorMax"
else
if p_ValorMax<>1 then
p_ValorMax=1
PropertyChanged "ValorMax"
else
' no cambia nada y por tanto no es necesaro anunciar cambio de valor en la propiedad
end if
end if
End Property
Otra cosa te indico si recibes un valor que ha de ser numérico el parámetro de la propiedad que sea numérico, si usan enteros pues un byte, integer ó long el que cubra el rango tolerado, y si es decimal un single o double, pero no un string, se pierde tiempo en convertir cadenas a valores luego a cadena lyuego otra vez a valores... deben hacerse las menos conversiones posibles... si tomas la propiedad de un control textbox, por ejemplo fíjate que ya la propiedad si su text no es numérico ya devuelve 0 salvo que que hagas un ValorMax=val(textbox1.text) y exista un texto que pueda valorarse numérico, como porejemplo ''299perro'' que tomaría 299... por tanto si te devuelve '0' ya no tienes que evaluar con la función isnumeric, sino sólo si está o no dentro del rango que tu querías mayor o igual a 1 y menor de 1000.