Usar Funcion externa al proyecto

23/09/2003 - 18:51 por OscarR | Informe spam
Hola a todos,
tengo una nueva duda

tengo dos proyectos VBA P1 y P2 en P1 tengo una función F1 que debe hacer
una llamada a otra función del P2 (función F2). F2 está declarada como
public, pero no me deja hacer la llamada que necesito desde P1->F1.

La unica solución q he encontrado ha sido referenciar el P2 al P1
através del menu herramientas-referencias, pero esto no me sirve, porque al
abrir el libro que contiene a P2 me abre también el libro que contiene a P1.

¿Como puedo hacer lo que busco? ¿Es problema de las declaraciones de las
funciones?

Gracias a todos
Saludos
Oscar

Preguntas similare

Leer las respuestas

#1 rasputin
23/08/2003 - 19:53 | Informe spam
Creo que el lugar adecuado para la consulta sería en vb, no obstante... ¿has
agregado el módulo donde está el programa llamado en el programa que llama?

"OscarR" escribió en el mensaje
news:%
Hola a todos,
tengo una nueva duda

tengo dos proyectos VBA P1 y P2 en P1 tengo una función F1 que debe hacer
una llamada a otra función del P2 (función F2). F2 está declarada como
public, pero no me deja hacer la llamada que necesito desde P1->F1.

La unica solución q he encontrado ha sido referenciar el P2 al P1
através del menu herramientas-referencias, pero esto no me sirve, porque


al
abrir el libro que contiene a P2 me abre también el libro que contiene a


P1.

¿Como puedo hacer lo que busco? ¿Es problema de las declaraciones de las
funciones?

Gracias a todos
Saludos
Oscar




Respuesta Responder a este mensaje
#2 Héctor Miguel
24/08/2003 - 08:32 | Informe spam
Hola, OscarR !

... dos proyectos ... en P1 ... una función que debe hacer una llamada a otra ... del P2 [...]
... no me deja hacer la llamada que necesito desde P1
... unica solución ... ha sido referenciar el P2 al P1 ... no me sirve, porque ... abre también ... P1
¿Como puedo hacer lo que busco? ¿Es problema de las declaraciones de las funciones?



==> (hasta donde yo se) existen 3 maneras de "ejecutar" un procedimiento (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.- "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")
es por eso que, al ejecutar "su" procedimiento "desde el otro" libro... SE ABRE (si no lo estaba)
de otra manera... ¿como sabria la aplicacion "lo que se supone que haga" el procedimiento? <\°±°/>

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

Si se trata de procedimientos "de uso frecuente"... ¿porque no intentas con la opcion # 3?
_______
Saludos,
Héctor.
MS-MVP

P.D. "parece que vienes del futuro" :)) Tu sistema "lleva" un mes adelante en la fecha ¿lo revisas? ;)
Respuesta Responder a este mensaje
#3 OscarR
24/08/2003 - 14:51 | Informe spam
Gracias Hector,
me he decantado por la opción 2, porque la op 1 no me resulta cómoda, ya que
el libro que
hace la llamada a la función externa, es una plantilla de factura
(Factura.xlt) y solo en el caso
de que la hoja que posee la función esté abierto (PartesTrabajo.xls), la
plantilla de factura debe
devolver el numero asignado a la factura a unas ciertas celdas de la hoja
poseedora de la función.
Es decir:
Factura.xlt ACTIVA; => NumFact asignado
PartesTrabajo.xls ABIERTO

'código en Factura.xlt
...
Si PartesTrabajo.xls ABIERTO
LLamar a funciondePartesTrabajo (NumFact)
Fin Si

'código en PartesTrabajo.xls
...
Sub PonerNumFactura (NumFact As Integer)
Copiar NumFact en celdas hoja
End Sub
...

En el resto de ocasiones no necesito tener este libro (PartesTrabajo.xls)
abierto.
Bueno, pues he seguido tus instrucciones para hacerlo y cuando llega a esta
linea de código da el
error de que no encuentra la macro
("X:\Carpeta\PartesTrabajo.xls!PonerNumFactura(NumFact)")
Cuando hago la llamada ya me he hasegurado mediante código que este libro
esta abierto.

Respecto a la op 3 no se como hacerlo si me lo pudieras indicar, lo
probaria. He buscado Personal.xls y
no lo he encontrado.

Gracias por vuestra ayuda, en especial a Hector.
PD: Gracias por el aviso de la fecha del sistema.
Oscar.
"Héctor Miguel" escribió en el mensaje
news:uyE#
Hola, OscarR !

> ... dos proyectos ... en P1 ... una función que debe hacer una llamada a


otra ... del P2 [...]
> ... no me deja hacer la llamada que necesito desde P1
> ... unica solución ... ha sido referenciar el P2 al P1 ... no me sirve,


porque ... abre también ... P1
> ¿Como puedo hacer lo que busco? ¿Es problema de las declaraciones de las


funciones?

==> (hasta donde yo se) existen 3 maneras de "ejecutar" un procedimiento


(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.- "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")
es por eso que, al ejecutar "su" procedimiento "desde el otro"


libro... SE ABRE (si no lo estaba)
de otra manera... ¿como sabria la aplicacion "lo que se supone que


haga" el procedimiento? <\°±°/>

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


"espacios intermedios"...
la ruta "completa" (hasta ANTES del signo "!") DEBERA "ir entre"


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


[Parametros_si_necesarios...]"

Si se trata de procedimientos "de uso frecuente"... ¿porque no


intentas con la opcion # 3?
_______
Saludos,
Héctor.
MS-MVP

P.D. "parece que vienes del futuro" :)) Tu sistema "lleva" un mes


adelante en la fecha ¿lo revisas? ;)


Respuesta Responder a este mensaje
#4 Héctor Miguel
25/08/2003 - 05:42 | Informe spam
Hola, OscarR!

(Espero que el orden de los factores, "no altere" el producto") :))

... op 3 ... como hacerlo ... He buscado Personal.xls y no lo he encontrado.



==> El libro de macros "Personal.xls" (en caso de que no "exista") lo puedes crear (p.e. la forma mas "simple" es:)
"Generando" una (nueva?) macro ... => Herramientas -> Macro -> Grabar nueva macro... < y en en las opciones de la macro => Guardar macro en: Libro de macros personal < La aplicacion (Excel) "se encargara" de grabarlo en el directorio de inicio.

1.- "Su objetivo" es que todos "sus" procedimientos esten disponibles para todos los libros (durante la sesion)
(a menos que los declares como "Private" o en el modulo que los contiene pongas la declaracion "Option Private Module")
2.- "Requisito" INDISPENSABLE es que LA VENTANA del archivo este oculta
=> NO "confundir" con el atributo oculto de un archivo en el sistema operativo < 3.- (posiblemente) "perderas" la presentacion de un libro en blanco al "arrancar" (solamente) Excel :((

me he decantado por la opción 2 ... y ... esta linea ... da el error de que no encuentra la macro
("X:\Carpeta\PartesTrabajo.xls!PonerNumFactura(NumFact)")
Cuando hago la llamada ya me he hasegurado mediante código que este libro esta abierto.



==> El metodo (Run) REQUIERE que los argumentos (que en su caso "solicite" el procedimiento) sean "convertidos" a "su" VALOR
es decir, "como si" escribieras TEXTUALMENTE "la llamada" COMPLETA
en tu caso, suponiendo que la variable (NumFact) "resultara finalmente" en 15 (p.e.) "tendrias que escribir" la llamada +/-
asi:
("X:\Carpeta\PartesTrabajo.xls!PonerNumFactura(15)")
(esto no significa que no puedan usarse variables, sino que deben ser "pasadas" como su "resultado final")
Para que una variable sea "convertida" a su valor final y "pueda ser pasada" como argumento de un procedimiento externo...
se deben usar TRIPLES "comillas dobles" para "delimitar" (el resultado de) una variable "agregada" a una cadena de texto.
Prueba con => ("X:\Carpeta\PartesTrabajo.xls!PonerNumFactura(""" & NumFact & """)")
_______
Saludos,
Héctor.
MS-MVP
Respuesta Responder a este mensaje
#5 OscarR
24/09/2003 - 01:03 | Informe spam
Gracias por el intento rasputin, pero no hay dios que entienda lo que me
comentas.
He preguntado aqui, porque mi aplicación es sobre Excel con VBA.
Gracias

"rasputin" escribió en el mensaje
news:e3Z9C#
Creo que el lugar adecuado para la consulta sería en vb, no obstante...


¿has
agregado el módulo donde está el programa llamado en el programa que


llama?

"OscarR" escribió en el mensaje
news:%
> Hola a todos,
> tengo una nueva duda
>
> tengo dos proyectos VBA P1 y P2 en P1 tengo una función F1 que debe


hacer
> una llamada a otra función del P2 (función F2). F2 está declarada como
> public, pero no me deja hacer la llamada que necesito desde P1->F1.
>
> La unica solución q he encontrado ha sido referenciar el P2 al P1
> através del menu herramientas-referencias, pero esto no me sirve, porque
al
> abrir el libro que contiene a P2 me abre también el libro que contiene a
P1.
>
> ¿Como puedo hacer lo que busco? ¿Es problema de las declaraciones de las
> funciones?
>
> Gracias a todos
> Saludos
> Oscar
>
>
>
>


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