2012-06-22 24 views
7

Estoy escribiendo una función de VBA que quiero que esté disponible públicamente en otros módulos de VBA dentro del mismo documento, sin embargo, no quiero que esté disponible como una UDF (función definida por el usuario).Cómo hacer que VBA funcione como "VBA solamente" y deshabilitarlo como UDF

Si uso el modificador de acceso público, sin embargo, mi función también estará disponible como una fórmula UDF a la que se puede llamar desde las celdas dentro del libro de trabajo. No quiero esto

¿Hay algún modificador de acceso u otro modo que pueda ayudarme a obtener este comportamiento "solo VBA"?

Saludos cordiales

+1

¿Puedes entrar en más detalles sobre qué hace esta función? Esto puede ayudar a sugerir formas de utilizar clases de VBA que solo son VBA, y no se pueden inicializar desde la hoja de trabajo. Al menos, muestre los argumentos de entrada esperados como valores de salida. – ja72

+1

Compruebe el nombre de tipo de application.caller dentro de la función. No lo he probado, pero creo que debería permitir comprobar si se está llamando a una función desde una celda. –

Respuesta

0

pasa un parámetro que sólo permite la función a ejecutar si se le da un "valor mágico * a ella

Ejemplo -. Esto le dará el error #NAME! a menos que sepa cuál es la clave es:

Function VBAOnly(key As Long) 

If key <> 12345 Then 
    VBAOnly = CVErr(xlErrName) 
    Exit Function 
End If 

VBAOnly = True 

End Function 
5

Esto devolverá un error # si se utiliza en Excel

. 10
+3

'xlErrName' sería mejor :) – Aprillion

+0

Gracias, pero esperaba que existiera un mecanismo que hiciera la función invisible a la hoja de cálculo. De esta forma, la función aún es visible (por ejemplo, en la función autocompletar), simplemente devuelve un error. Esto no es el 100% de lo que tenía en mente. – Skifozoa

+0

+1 por sugerencia de Dick. @Skifozoa según el comentario de KFleschner hace de esto una 'Función privada' – brettdj

-1

Utilizando el modificador Private sólo debería permitir la ejecución en el módulo de la función existe en.

+0

No es así. Las pruebas de Cursory muestran que las funciones 'Privadas' son accesibles desde Excel. –

1

Si utiliza Option Private Module en el módulo en el que aparece la función, la función se puede declarar como Public y utilizarse en cualquiera de sus otros módulos dentro de su proyecto de VBA, pero no serán accesibles por otras aplicaciones o proyectos, incluido el propio Excel.

Cuestiones relacionadas