3 votos

El validador de datos de MS Excel no acepta la llamada a la macro personalizada

Tengo la macro VB funcionando que valida el contenido. Toma dos parámetros de cadena (valor de la celda y expresión regular) y devuelve True o False. Utiliza CreateObject("VBscript.regexp") internamente.

Necesito utilizar esta macro para validar la celda. Cuando intento configurarlo como un validador personalizado de la forma

=Rex(E2, "\d{1,2}\:\d{2}")

donde Rex es mi función definida en la misma hoja de cálculo (Alt-F11 y teclear) y E2 es una celda que estoy intentando validar, obtengo el mensaje "No se puede encontrar un rango con nombre especificado".

Si inserto la misma función en cualquier otro lugar de la misma hoja de cálculo (por ejemplo, en la esquina superior de la celda A1):

=Rex(E2, "\d{1,2}\:\d{2}")

el me muestra muy bien TRUE si la celda E2 corrige el valor correcto como 15:07 y FALSE si no le gusta 15xx - medio resuelto pero realmente no hasta el final. Realmente necesito integrar mi validador de una manera estándar.

Estoy utilizando MS Excel 2010. La macro en sí es

Public Function Rex(ByVal vsStringIn As String, ByVal vsPattern As String) As Boolean
    Dim objRegEx As Object
    Set objRegEx = CreateObject("VBscript.regexp")

    objRegEx.Global = True
    objRegEx.Pattern = vsPattern

    Rex = objRegEx.Test(vsStringIn)
    Set objRegEx = Nothing
End Function

Y el problema parece

MS Excel validator problem

1voto

Peter Albert Puntos 2070

Un problema interesante. ¡Parece que las UDFs no siempre funcionan en la Validación de Datos! :-(

Siguiendo las alternativas:

  • Utilice el formato condicional en su lugar y simplemente resalte cualquier valor incorrecto
  • Utilice una fórmula normal de Excel en lugar de su regex para hacer la validación. En su caso, \=IFERROR(IF(SEARCH(":",D3),AND(ISNUMBER(VALUE(LEFT(D3,SEARCH(":",D3)-1))),ISNUMBER(VALUE(RIGHT(D3,LEN(D3)-SEARCH(":",D3))))),FALSE),FALSE)hará el trabajo. No es bonito, pero al menos es funcional ;-)

Nota al margen: ni su UDF ni la fórmula anterior funcionarán si el valor a comprobar es un número (con el formato Hora) y no una cadena.

0voto

Gerhard Powell Puntos 101

Sé que es una pregunta antigua, pero no quiero duplicar la pregunta.

Solución: Puede aplicar la fórmula UDF en una celda diferente, y luego usar ese valor en la Validación de Datos. Puede ocultar el valor temporal simplemente cambiando el color a blanco.

Para más información: http://support.microsoft.com/kb/160523

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: