............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Usar una variable entre dos macros de libros distintos?

Ver el tema anterior Ver el tema siguiente Ir abajo

Usar una variable entre dos macros de libros distintos?

Mensaje por focalabestia el Vie Dic 03, 2010 10:01 am

Hola! Estoy haciendo una macro que unifica la ejecucion de varias macros que realizan diversos informes. El problema que tengo es que no puedo unir todas estas macros ya que podria darse el caso que fuera necesario ejecutarlas separadamente...

El problema que tengo es que asigno unas variables a la macro principal para definir unos criterios que necesito para las macros que se ejecutan automaticamente cuando las abre esta macro principal. Pongo un ejemplo para que se entienda:

La macro principal define como Public ejemplo as string y le asigna un valor, entonces abre otra macro que se ejecuta directamente y que necesita conocer el valor de "ejemplo" pero cuando este codigo se ejecuta la variable ya no la tengo...

Hay algun modo de resolver este problema?

Muchas gracias!!!

P.D.: entiendo que es algo que tal vez se ha comentado anteriormente pero usando la busqueda no he conseguido encontrar ninguna solucion...

focalabestia

Masculino Cantidad de envíos : 4
Edad : 94
Ciudad - Pais : Irlanda
Version de Excel : 2003-2007
Fecha de inscripción : 12/01/2010

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por GalileoGali el Vie Dic 03, 2010 1:17 pm

¿Pones la declaración de la variable Public, fuera de cualquier macro, encabezando el módulo y ´´este, el módulo, es estandard?

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por P@li el Vie Dic 03, 2010 7:21 pm

Podrías probar declarando las variables como Global en un módulo.
Aunque yo siempre prefiero usar parámetros en Procedimientos y Funciones "principales", y llamarlas en diversos momentos desde procedimientos secundarios como botones y eventos.

Saludos!
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Vie Dic 03, 2010 8:56 pm

Buenas otra posible forma es que la macro envie el dato de la variable a la macro 2 prueba el siguiente codigo para que te pueda dar una idea

Código:
Sub pruebavariable()
Dim myname As String, x As Long, Myarray
Myarray = Array("Pedro", "Jose", "Luis", "Mario")
y = Application.InputBox("indique numero entre 0 y 3 para optener nombre", Type:=1)
If y > 3 Then y = 3
For x = 0 To y
    myname = Myarray(x)
Next x
pruebavariable1 myname
End Sub
'**************************************
Sub pruebavariable1(ByVal nombre As String)
MsgBox nombre
End Sub

un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por GalileoGali el Vie Dic 03, 2010 9:52 pm

a ver CONSULTO
si tengo en el Libro1, Modulo Estandard esto
Código:
Global Myarray() As Variant

Sub pruebavariable()
Myarray() = Array("Pedro", "Jose", "Luis", "Mario")
End Sub

y en el Libro2 en otro Modulo, por ejemplo Thisworkbook, esto

Código:
Sub pruebavariable1()
MsgBox Myarray(2)
End Sub

No funciona.

No obstante....Sí!!! funciona en el caso de dos Modulos del Mismo libro, declarando Public en lugar de Global....

De paso consulto una variable Static puede ser declarada fuera de un Procedimiento????

¿Cual es la vida de una STATIC y cual la de una Public???


_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Sáb Dic 04, 2010 9:22 am

Buenas si es para pasar la variable a otro libro prueba lo siguiente en el libro llamemoslo 1 coloca el siguiente codigo

Código:
Option Explicit
Sub PasarVariableValores()
  Dim PassVariable As Integer, PasVariable1 As Integer
  PassVariable = 1234
  PassVariable1 = 5678
  Workbooks.Open ThisWorkbook.Path & "\2.xls"
  Application.Run "2.xls!ReciBirVariable", PassVariable, PassVariable1
  ThisWorkbook.Close
End Sub

y en el segundo libro que llamaremos 2 coloca lo siguiente

Código:
Option Explicit

Public NewVar1, NewVar2, Resultado2

Sub ReciBirVariable(PassVariable As Integer, PassVariable1 As Integer)
  Dim Resultado As Integer
  NewVar1 = PassVariable
  NewVar2 = PassVariable1
  Resultado = PassVariable + PassVariable1
  Resultado2 = Resultado
  MsgBox "Ver Variables Recibidas" & Chr(10) & "En primera Macro"
  MsgBox PassVariable
  MsgBox PassVariable1
  MsgBox Resultado1
  VerVariablesRecibidas
End Sub

y en otro modulo del libro 2 coloca lo siguiente

Código:
Option Explicit
Sub VerVariablesRecibidas()
  MsgBox "Ver Variables Recibidas" & Chr(10) & "En segunda Macro"
  MsgBox NewVar1
  MsgBox NewVar2
  MsgBox Resultado2
End Sub

espero que te aclare la duda

un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por GalileoGali el Sáb Dic 04, 2010 12:31 pm

Bueno, no lo probé pero otorgo confianza a su realizador. Pero de todas formas creo que estamos llevando el tema hacia otro lado, creí que íbamos a tratar sobre los ambitos (scope) y vida (lifetime) de las variables en VBA...

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por avalencia el Sáb Dic 04, 2010 1:05 pm

Hola Gali, retomando (creo) tus preguntas, quizas podamos comenzar con lo que dice el propio Microsoft de las variables y sus instancias de declaracion en el VBA:

[Tienes que estar registrado y conectado para ver este vínculo]

Una vez hecho eso, si quedan dudas podemos continuar con el tema. Saludos

Abraham


_________________
Microsoft MVP 2010

avalencia
MS MVP
MS MVP

Masculino Cantidad de envíos : 99
Edad : 39
Ciudad - Pais : Lima - Peru
Version de Excel : 2003 - 2007 - 2010
Fecha de inscripción : 28/06/2009

http://abrahamexcel.webcindario.com/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Sáb Dic 04, 2010 1:16 pm

Buenas perdonar si me fui del tema principal aca dejo una pequeña explicación del uso de la dimensiones(Dim) y su vida

El alcance y la duración de las variables de VBA Excel (Scope y Lifetime)

En Excel, en el código en VBA, podemos utilizar lo que se conoce como variables para almacenar información.
Estas variables (como su nombre indica) se puede variar y cambiar para almacenar la información de datos diferentes.
Tan pronto como una variable pierde su ámbito pierde su valor almacenado.
Niveles de Variables en Excel VBA
Hay tres niveles en los que podemos usar dimensión (Dim) variables.
Estas son;
1) Procedimiento de nivel
2) Módulo de Nivel
3) Nivel de proyecto, nivel de libro, o pública de nivel de módulo

Cada uno de estos niveles difiere en alcance y tiempo de vida.

1) Procedimiento de nivel
Estas son probablemente las más conocidas y ampliamente utilizado variables.
Son dimensiones (Dim) dentro del propio procedimiento.
Véase el ejemplo a continuación;

Sub MyMacro ()
Dim lRows as Long
lRows = Sheets(1).Range(“A” & Rows.Count).End(xlUp).Row
End Sub

Todas las variables dimensiones en este nivel sólo están disponibles para el procedimiento de que se encuentran dentro... Tan pronto como finalice el procedimiento, la variable se destruye.

2) De nivel de módulo

Estas son variables que están dimensionados (Dim) fuera el propio procedimiento en la parte superior de cualquier privada o Módulo Pública.
Véase el ejemplo a continuación;

Dim lRows as Long
Sub MyMacro ()
lRows = Sheets(1).Range(“A” & Rows.Count).End(xlUp).Row
End Sub

Todas las variables dimensiones en este nivel están disponibles para todos los procedimientos que se encuentren en el mismo módulo se dimensiona la variable. Su valor se conserva a menos que el libro se cierra o la Declaración Final se utiliza.

3) Nivel de proyecto, nivel de libro, o de los sectores públicos y nivel de módulo
Estas variables se dimensionan en la parte superior de cualquier módulo estándar pública, como se muestra a continuación;

Public lRows as Long

Todas las variables dimensiones en este nivel están disponibles para todos los procedimientos en todos los módulos.
Su valor se conserva a menos que el libro se cierra o la Declaración Final se utiliza.

espero que esto pueda dar algo más de luz al tema

Un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por GalileoGali el Sáb Dic 04, 2010 2:07 pm

LogroAstur: Sería entonces Declaracion Final equivalente a utilizar End, pero no End Sub??


Última edición por GalileoGali el Sáb Dic 04, 2010 4:59 pm, editado 1 vez

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Sáb Dic 04, 2010 2:57 pm

Buenas galileogali quizas me di mal a entender lo que queria decir es que se acabase la macro bien con la sentencia de exit sub, end o end sub y claro esta no fuese llamada en otra función o macro

_________________


ForoExcel


avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por moises melgar el Sáb Dic 04, 2010 3:42 pm

Hola el articulo esta muy bueno solo para aclarar a otros usuarios que lo lean
[Tienes que estar registrado y conectado para ver este vínculo]
Ejecutar las macros de ejemplo en Microsoft Excel 97 y en versiones posteriores de Excel
en el paso 6 al escribir en la hoja de módulo de VideoSales.xlsm

Public SalesPrice As Integer
Public UnitsSold As Integer
Public CostPerUnit As Integer

Sub VideoSales()
SalesPrice = CDSales.SalesPrice * 1.05
UnitsSold = CDSales.UnitsSold * 1.456
CostPerUnit = CDSales.CostPerUnit * 1.75
MsgBox "The Projected Gross Profit for video sales is $" & _
(SalesPrice * UnitsSold) - (UnitsSold * CostPerUnit)
' Displays the value of 5824 as the projected gross profit.
End Sub

CDSales es el nombre que le damos en propiedades al libro CDSales en el paso numero 1 de la explicacion
gracias a Avalencia por el articulo
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 531
Edad : 28
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por focalabestia el Jue Dic 09, 2010 9:04 am

Hola! Primero de todo: Muchas gracias a todos por la ayuda!!! (avalencia gracias por el doble posteo aqui y en el otro foro).

Sobre visibilidades comentar que no puedo usar Global, almenos en mi caso me da un error y me indica que no puedo usar esta instruccion de este modo sino que necesito un userform i que utilice la declaracion Public...

Por lo que se refiere al codigo de Logroastur me ha funcionado perfectamente!!! Muchas gracias de verdad!!! ;D

Únicamente me he encontrado con un problema, que debe ser MUY simple de resolver pero que no atino como solucionarlo... La cosa es que en esta parte del codigo

Workbooks.Open Filename:="D:\Macro ejemplo.xls"
Application.Run "Macro ejemplo.xls!ReciBirVariable", PassVariable, PassVariable1

Si hay un espacio en el nombre de la macro (como en este caso) en la segunda instruccion me da un error... Es la primera vez que me pasa en una macro y no estoy seguro sobre que necesito indicar para que entienda que el nombre tiene un espacio¿?

A ver si alguien me puede indicar cual es el problema. Y nuevamente muchas gracias por la ayuda!!!


focalabestia

Masculino Cantidad de envíos : 4
Edad : 94
Ciudad - Pais : Irlanda
Version de Excel : 2003-2007
Fecha de inscripción : 12/01/2010

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Jue Dic 09, 2010 9:44 am

Buenas puedes probar a colocar

Workbooks.Open Filename:="D:\Macro ejemplo.xls"
Application.Run "'Macro ejemplo'.xls!ReciBirVariable", PassVariable, PassVariable1

aunque no entiendo el por que te genera el error

un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por focalabestia el Jue Dic 09, 2010 9:54 am

Hola! Nuevamente muchas gracias Logroastur, no hubiera pensado nunca con añadir el apostrof...

Ya me ha funcionado aunque he tenido que modificar la posicion, para que funcione (yo tampoco entiendo que lo requiera...) es asi:

Workbooks.Open Filename:="D:\Macro ejemplo.xls"
Application.Run "'Macro ejemplo.xls'!ReciBirVariable", PassVariable, PassVariable1

Ahora ya va perfecto!!! Muchas gracias!!! ;D

focalabestia

Masculino Cantidad de envíos : 4
Edad : 94
Ciudad - Pais : Irlanda
Version de Excel : 2003-2007
Fecha de inscripción : 12/01/2010

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por focalabestia el Mar Dic 14, 2010 9:30 am

Hola de nuevo! Como siempre pasa nunca nada es tan facil... XD

La cosa es que ahora que he conseguido que todo funcionara perfectamente me encuentro con otro problema... A ver como os comentaba lo que tengo es una macro que lanza otras macros que son independientes de la primera, lo que me sucede es que en un modulo tengo dos instrucciones de lanzar dos informes (abrir dos ficheros que ejecutan una macro cada uno para crear un informe).

Bien, con el primero ya lo tengo funcionando (es el que pregunte en este hilo) pero ahora cuando me pongo con el segundo veo que el compilador no vuelve a la primera macro para seguir ejecutando codigo...

Me explico: Estoy en el libro1 con el codigo que me ayudasteis a realizar abrimos el libro2 y le pasamos una variable, el libro 2 ejecuta una macro, crea un fichero y cuando se acaba este codigo no vuelve al codigo del modulo del libro1 para seguir ejecutando lo que queda de codigo en la primera macro...

Se puede resolver de algun modo¿? Puede ser que al llamar a una macro desde otro libro y pasar la variable el compilador entienda que ya no ha de volver para continuar con el codigo que quedaba¿?

Muchas gracias!!!

focalabestia

Masculino Cantidad de envíos : 4
Edad : 94
Ciudad - Pais : Irlanda
Version de Excel : 2003-2007
Fecha de inscripción : 12/01/2010

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Logroastur el Vie Dic 17, 2010 5:07 pm

Buenas puedes probar a partir las macros es decir

Mcros en libro 1

Sub MacroLibro1()
el codigo
llama MacorLibro2
end sub

sub Macro2Libro1()
el codigo
llama macroLibro3
end sub


sub Macro3Libro1()
el codigo
end sub

---------------------------------------------------------
Macros libro 2
sub macrolibro2()
el codigo
llama Macro2Libro1
end sub
----------------------------------------------------------
Macros Libro 3
sub macroLibro3()
el codigo
llama Macro3Libro1
end sub
----------------------------------------------------------

un saludo
avatar
Logroastur
Moderador
Moderador

Masculino Cantidad de envíos : 32
Edad : 52
Ciudad - Pais : España
Version de Excel : 2007
Fecha de inscripción : 20/11/2010

http://www.foroexcel.com/foro/

Volver arriba Ir abajo

no consigo que mi segundo libro reconozca una variable reconocida en el primero

Mensaje por vbalife el Jue Dic 10, 2015 10:33 am

Muy buenas.

Tras varios dias mirando y remirando los codigos ya parece que tengo todo programado, el inconveniente es que al ejecutar una de mis macros abro otro libro en el que me es necesario el reconocimiento de una variable anterior definida como global de tipo bolleano y el segundo libro no me la reconoce como puedo hacer este transito?

Grcias de antemano

vbalife

Masculino Cantidad de envíos : 1
Edad : 29
Ciudad - Pais : España
Version de Excel : excell 2010
Fecha de inscripción : 10/12/2015

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Javier LoEn el Mar Feb 16, 2016 8:20 pm

Hola, acabo de entrar al foro, me llamo Javier, de Sevilla (Spain).

¿Sabes manejarte con clases?

Verás, NO es fácil, se trata de declarar las variables en una clase, referenciar el libro original en el nuevo y llamarla.

Si entiendes algo de classes, contéstame y te pongo un ejemplo

saludos
avatar
Javier LoEn

Masculino Cantidad de envíos : 1
Edad : 52
Ciudad - Pais : Seville (Spain)
Version de Excel : 2010
Fecha de inscripción : 16/02/2016

Volver arriba Ir abajo

Re: Usar una variable entre dos macros de libros distintos?

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.