Variable Publica

02/03/2005 - 04:03 por Fabian | Informe spam
Hola a Todos!
Es posible usar una variable perteneciente a un libro, en otro libro?
Si es posible me pudiesen decir que tipo de variable tiene que ser y donde
declararla, sino tendre que pasarla a una celda y tomarla de alli. La
variable en cuestion seria esta:
Libro1=ThisWorkbook.Name

Gracias.

Preguntas similare

Leer las respuestas

#16 Fabian
05/03/2005 - 07:58 | Informe spam
Hetor Miguel escribio:

... como agregarle el rango... probe todas la formas que encontre en la
ayuda
... [mas codigo] ...
If EsteLibro.CodeName = "LibroMaestro" Then
Set LibroHallado = EsteLibro
... [mas codigo] ...
For Each R In LibroHallado.Hoja1. 'AQUI es donde no se que poner
[A2:A100]
... [mas codigo] ...
'For Each R In Workbooks("Libro1").Worksheets("Hoja1").Range("A2:A100")
'Funciona
'For Each R In LibroHallado.Hoja1.MiRango 'No Funciona con Set
MiRango=[A2:100]
'For Each R In LibroHallado.Hoja1.Range("A2:A100") 'No Funciona
'For Each R In LibroHallado.Hoja1.[A2:A100] 'No Funciona
'For Each R In LibroHallado.Worksheets("Hoja1").[A2:A100] 'Funciona.



primero: cuando estableces la referencia al libro [abierto] 'encontrado' con
la instruccion...
Set LibroHallado = EsteLibro 'observa' que la variable
'LibroHallado'...


1.- se convierte en una variable de objeto tipo 'Workbook' [con todo y sus
propiedades y metodos]
2.- cada vez que la 'usas/llamas', equivale a 'decir' [al codigo] que 'se
refiere a...'
=> Workbooks("Nombre REAL del libro CUYO CODENAME ES 'LibroMaestro'")
<3.- NO IMPORTA si el usuario le ha cambiado el nombre 'real' al libro [es
'la ventaja' del codename]

segundo: si 're-lees' el mensaje 4 de 'trabajar con variables' [del vinculo
señalado en el grupo]...
hay un comentario [que creo es 'el meollo' en este asunto] que +/- dice
que...
=> para 'referenciar' hoja y libro usando 'codenames' DE OTROS LIBROS
[que NO 'dejan' de ser VARIABLES -de un tipo 'definido por la
aplicacion'-]
es =>'imprescindible'<= establecer referencias 'entre sus proyectos de
macros'

tercero: cuando 'construyes' una variable que hace referencia a un rango con
la instruccion...
Set MiRango=[A2:100] 'observa' que [A2:A100], al NO tener
'calificadores previos'...


1.- se refiere al rango "a2:a100" -> de la hoja 'activa' <-
2.- la hoja 'activa'... ESTA -> en el libro 'activo' <-

cuarto: por lo anterior, [todas] las 'formas' que utilizas para construir la
referencia... 'fallan'... :(
-> porque 'tratan' de usar los 'codename' de los objetos del 'otro' libro
[SIN establecer 'referencias']

quinto: si NO quieres 'tener que' establecer referencias 'entre libros' en
el proyecto vba [de alguno]
-> sera 'mejor' utillizar variables de tipo 'String' que...
-> 'busquen' los nombres 'reales' [libro y hoja] ->utilizando los
'codenames'<- [en la busqueda] p.e.
Dim Libro As Workbook, Hoja As Worksheet, EsteLibro As String, EstaHoja As
String
For Each Libro In Workbooks
If Libro.CodeName = "CodeNameDeLibroBuscado" Then
EsteLibro = Libro.Name
Exit For
End If
Next
If EsteLibro = "" Then Exit Sub ' o manejas algun tipo de
respuesta/prevencion/correccion
For Each Hoja In Workbooks(EsteLibro)
If Hoja.CodeName = "CodeNameDeHojaBuscada" Then
EstaHoja = Hoja.Name
Exit For
End If
Next
If EstaHoja = "" Then Exit Sub ' o manejas algun tipo de
respuesta/prevencion/correccion
-> a partir de la siguiente linea, las variables 'EsteLibro' y 'EstaHoja'
estarian haciendo referencia...
-> a los nombres 'reales' del libro y la hoja 'apropiadas' [en caso de
haberse 'encontrado']
-> por lo tanto, la 'construccion' del rango de busqueda puede/tiene que
usar dichos 'nombres' p.e.
-> For Each R In Workbooks(EsteLibro).Worksheets(EstaHoja).Range("a2:a100")
-etc. etc. etc.-

sexto: la forma anterior 'propuesta' es [solo] una de entre varias SIN
'tener que referenciar...'
ya despues tu elegiras la forma de 'notacion' para trabajar con las
variables, etc. etc. etc.

haz pruebas y si cualquier duda... ¿comentas?
saludos,
hector.

Fabian dice: Gracias! Hector
Respuesta Responder a este mensaje
#17 Fabian
06/03/2005 - 01:27 | Informe spam
Hola Hector!
Sub Prueba()
10 Dim Libro As Workbook
20 Dim Hoja As Worksheet
30 Dim EsteLibro As String
40 Dim EstaHoja As String
50 For Each Libro In Workbooks
60 If Libro.CodeName = "LibroMaestro" Then
70 EsteLibro = Libro.Name
80 Exit For
90 End If
100 Next
110 If IsEmpty(EsteLibro) Then: MsgBox "El LibroMaestro NO esta presente en
la sesion": Exit Sub
130 For Each Hoja In Workbooks(EsteLibro)
140 If Hoja.CodeName = "Hoja1" Then
150 EstaHoja = Hoja.Name
160 Exit For
170 End If
180 Next
190 For Each R In
Workbooks(EsteLibro).Worksheets(EstaHoja).Range("a2:a100")
200 If IsEmpty(R) Then: Exit For
210 Next
220 End Sub

Te comento que cuando llega a la linea 130 da error 438.
Tambien te comento que he leido la pagina que me sugeriste e
instantaneamente aplique las recomendaciones.
Cualquier ayuda es bien recibida. Gracias.
Respuesta Responder a este mensaje
#18 Héctor Miguel
06/03/2005 - 05:39 | Informe spam
hola, Fabian !

Sub Prueba()
10 Dim Libro As Workbook
20 Dim Hoja As Worksheet
30 Dim EsteLibro As String
40 Dim EstaHoja As String
50 For Each Libro In Workbooks
60 If Libro.CodeName = "LibroMaestro" Then
70 EsteLibro = Libro.Name
80 Exit For
90 End If
100 Next
110 If IsEmpty(EsteLibro) Then: MsgBox "El LibroMaestro NO esta presente en la sesion": Exit Sub
130 For Each Hoja In Workbooks(EsteLibro)
140 If Hoja.CodeName = "Hoja1" Then
150 EstaHoja = Hoja.Name
160 Exit For
170 End If
180 Next
190 For Each R In Workbooks(EsteLibro).Worksheets(EstaHoja).Range("a2:a100")
200 If IsEmpty(R) Then: Exit For
210 Next
220 End Sub
... cuando llega a la linea 130 da error 438.
... he leido la pagina que me sugeriste e instantaneamente aplique las recomendaciones.
Cualquier ayuda es bien recibida. Gracias.



1.- tienes razon... 'sembre de memoria' el codigo de la propuesta en el correo y... :(
[como reza un proverbio chino... la mas palida tinta... es mejor... que la mas brillante memoria] ;)
OMITI complementar sobre que objetos se va a realizar el bucle... ->Worksheets<-
la linea 130 'completa/complementada' seria [suponiendo solo para ->hojas de calculo<-]...
130 For Each Hoja In Workbooks(EsteLibro).Worksheets
2.- solo comentarte que la funcion 'IsEmpty()' de vba NO te 'garantiza' haber 'detectado' la [no]presencia del libro :(
IsEmpty SOLO 'verifica' si la variable ha sido ->inicializada<-... lo cual 'sucedio' con la instruccion 'Dim' <= OJO
para el caso de 'verificar' [el contenido de] variables de texto [vacias o no] es mejor 'preguntar' si son: -> = "" <-
cambiala por: ->If EsteLibro = "" Then: MsgBox "El LibroMaestro NO esta presente en la sesion": Exit Sub<-
3.- [segun yo] hace falta una verificacion 'similar' para 'la hoja' [entre las lineas 180 y 190...
If EstaHoja = "" Then: MsgBox "La hoja requerida NO se encuentra en el LibroMaestro": Exit Sub

saludos,
hector.
p.d. gracias por LOS 'feed-back' [y 'la visita'] ;)
para [tratar de] 'reforzar' los comentarios del punto 2... haz una prueba con la siguiente macro:
Sub EsTextoVacio()
Dim VariableDeclarada As String
MsgBox "La 'Declarada' esta vacia: " & IsEmpty(VariableDeclarada) & vbCr & _
"NO Declarada esta vacia: " & IsEmpty(VariableNoDeclarada) & vbCr & vbCr & _
"La 'Declarada' ES 'vacio': " & (VariableDeclarada = "") & vbCr & _
"NO Declarada ES 'vacio': " & (VariableNoDeclarada = ""), , "Variables"
End Sub
Respuesta Responder a este mensaje
#19 Fabian
06/03/2005 - 06:26 | Informe spam
Gracias por contestar
Te cuento que cuando me conecte fue para pasarte este codigo, ya habia
conseguido que encuentre la hoja usando codename, ahora solo me falta que
reconozca el rango! Paso a paso, dentro de 10 dias termino!
Sub Prueba()
Dim R As Range
Dim Libro As Workbook, LibroHallado As Workbook
Dim Hoja As Worksheet, HojaHallada As Worksheet

For Each Libro In Workbooks
If Libro.CodeName = "LibroMaestro" Then
Set LibroHallado = Libro
Exit For
End If
Next
If LibroHallado Is Nothing Then: MsgBox$ "El LibroMaestro NO esta presente
en la sesion": Exit Sub
For Each Hoja In LibroHallado.Worksheets
If Hoja.CodeName = "Hoja1" Then
Set HojaHallada = Hoja
End If
Next
End Sub
Respuesta Responder a este mensaje
#20 Héctor Miguel
06/03/2005 - 07:38 | Informe spam
hola, Fabian !

... ahora solo me falta que reconozca el rango! Paso a paso, dentro de 10 dias termino!



[me parece que] sigues 'mezclando/probando' con las formas de obtener/establecer/usar las referencias...

1.- por variables 'String' usando los codename para detectar el nombre 'real' del libro y la hoja
- y posteriormente usar -SIN 'referencias' en vba- una 'construccion directa-tradicional' como...
Workbooks(VariableStringLibro).Worksheets(VariableStringHoja) [+ X 'nomenclatura' para el rango]
2.- por variables ->de objeto<- [As Workbook y As Worksheet] =>tipo 'definido por la aplicacion'< estableciendo sus referencias a traves de instrucciones 'Set' ->sin 'olvidar'<- que ademas...
REQUIERE 'referenciar' los proyectos de vba [por tratarse de objetos ->de/en libros 'ajenos/distintos<-]

si cualquier duda... ¿comentas?
saludos,
hector.
p.d. si quieres 'ahorrarte' esos diez dias...
-> 'decidete' por cual 'metodo/mecanismo/...' quieres establecer las referencias a los objetos <-
[independientemente de que 'en el inter' sigas corriendo pruebas con diversas formas/combinaciones] ;)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida