Public sub VBA

10/10/2003 - 23:50 por MRGT | Informe spam
Hola,
He leido en la ayuda de VBA que cuando a una sub() dentro de un módulo se le
antepone el prefijo 'Public' entonces su código está disponible para el
resto de los módulos, o sea es lo contrario que el prefijo 'Private' que
restringe el código solo a las rutinas dentro del módulo al que pertenezca
la sub(). Bueno pues el prefijo 'Private' si que me funciona, sin embargo
cuando antepongo el prefijo 'Public' no tengo el código de esa sub()
disponible para el resto de los módulos de otros proyectos; si que está
disponible para otros módulos del mismo proyecto, pero para eso no es
necesario el prefijo 'Public' pues aún sin él si lo están.
¿Sabe alguien cómo hacer que esto funcione como debe? es decir disponer del
código de una sub() de un proyecto (libro) para que pueda llamarse desde una
rutina contenida en otro proyecto (libro). Desde luego que estando con un
libro activo no tengo problemas en ejecutar subrutinas contenidas en módulos
de otros proyectos o libros, el problema es desde el módulo de un proyecto
llamar a sub's() de otro.
Saludos
Martín RG

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
11/10/2003 - 01:36 | Informe spam
Hola, Martin !

... en la ayuda de VBA ... una sub() ... 'Public' ... esta disponible para el resto de los modulos [contrario 'Private'] ...
... 'Private' si que me funciona, sin embargo ... 'Public' no tengo el codigo de esa sub() ... para ... otros proyectos ...



==> 'Public' es el prefijo 'por omision' para un procedimiento [sub o funcion] =>no es necesario 'especificarlo'< y [hasta donde yo se] existen 3 maneras de 'ejecutar' un procedimiento [sub o funcion] 'desde otro' libro
1.- haciendo referencias al proyecto en el editor de VBA
2.- usando el metodo => Application.Run "X:\Directorio\Libro.xls!Macro_o_Funcion [Parametros...]"
3.- si 'solamente' se requiere llamar a funciones 'personalizadas' en hojas de calculo...
teniendolas 'disponibles', ya sea en algun complemento [xla] o en el libro de macros 'Personal.xls'

en todos los casos, el libro 'que contiene' el procedimiento 'necesita' estar abierto [o 'disponible']
en caso contrario, al ejecutar 'su' procedimiento [desde el otro libro]... SE ABRIRA

OJO con la opcion # 2... si la ruta y/o el nombre del libro contiene 'espacios intermedios' [o 'solo' numeros]...
la ruta completa (hasta ANTES del signo '!') DEBERA 'ir entre' comillas simples [apostrofos], p.e.:
Application.Run "'C:\Mis documentos\Mi Libro.xls'!Macro_o_Funcion [Parametros_si_necesarios...]"

Saludos,
Héctor.
Respuesta Responder a este mensaje
#2 MRGT
11/10/2003 - 12:00 | Informe spam
Bien,
No lo he probado usando todo el sendero ('path') como sugieres porque el
libro que contiene el proyecto y los módulos a cuyo procedimiento quiero
llamar desde otro procedimiento de otro proyecto está abierto. En la ayuda
te dicen que uses la siguiente sintaxis:
[nombrelibro.xls].[nombremódulo].nombresubrutina, con o sin el 'Call'
previo, parece que es indiferente. Lo he probado de un montón de formas y no
funciona. Ya me he encontrado con algunas incongruencias en el lenguaje VBA
que en la ayuda te dicen una cosa y luego no funciona, hay que hacerlas de
otra forma ligeramente distinta. No es que tenga una necesidad total de
hacer esto porque siempre puedes escribir el código en el mismo proyecto,
pero estoy escribiendo unas utilidades .xla que deben contener unas rutinas
auxiliares para mi desarrollo a las cuales el usuario no debe tener acceso
ya que están en mi libro de macros personal ... en fin.
Otra cuestión sería ¿para qué vale el 'Public' si no es para esto? dado que
por defecto todos los procedimientos parecen ser públicos a no ser que
incluyas 'Private sub nombresub()'


"Héctor Miguel" escribió en el mensaje
news:#
Hola, Martin !

> ... en la ayuda de VBA ... una sub() ... 'Public' ... esta disponible


para el resto de los modulos [contrario 'Private'] ...
> ... 'Private' si que me funciona, sin embargo ... 'Public' no tengo el


codigo de esa sub() ... para ... otros proyectos ...

==> 'Public' es el prefijo 'por omision' para un procedimiento [sub o


funcion] =>no es necesario 'especificarlo'<> y [hasta donde yo se] existen 3 maneras de 'ejecutar' un
procedimiento [sub o funcion] 'desde otro' libro
1.- haciendo referencias al proyecto en el editor de VBA
2.- usando el metodo => Application.Run


"X:\Directorio\Libro.xls!Macro_o_Funcion [Parametros...]"
3.- si 'solamente' se requiere llamar a funciones 'personalizadas' en


hojas de calculo...
teniendolas 'disponibles', ya sea en algun complemento [xla] o


en el libro de macros 'Personal.xls'

en todos los casos, el libro 'que contiene' el procedimiento


'necesita' estar abierto [o 'disponible']
en caso contrario, al ejecutar 'su' procedimiento [desde el otro


libro]... SE ABRIRA

OJO con la opcion # 2... si la ruta y/o el nombre del libro contiene


'espacios intermedios' [o 'solo' numeros]...
la ruta completa (hasta ANTES del signo '!') DEBERA 'ir entre'


comillas simples [apostrofos], p.e.:
Application.Run "'C:\Mis documentos\Mi Libro.xls'!Macro_o_Funcion


[Parametros_si_necesarios...]"

Saludos,
Héctor.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida