obtener nombre de las hojas de un libro sin abrirlo

04/02/2007 - 02:58 por Ivan | Informe spam
hola a todos

prácticamente el asunto lo dice todo: ¿es posible obtener vía código los
nombres de las hojas de un libro sin tener que abrirlo? no me haría falta
acceder a los datos de dicho libro, tan solo obtener estos nombres, y de
paso (como mucho, pero no imprescindible) el valor de otras propiedades tipo
: fecha creación, ultima modificación. etc..

para esto ultimo he pensado que quizás me valiera DocumentProperty (no lo he
probado ), pero lo cierto es que para el nombre de las hojas no se muy bien
como intentarlo

si podéis echarme una mano os lo agradezco

un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
04/02/2007 - 03:25 | Informe spam
hola, Ivan !

... es posible obtener via codigo los nombres de las hojas de un libro sin tener que abrirlo?
... y de paso (como mucho, pero no imprescindible) el valor de otras propiedades tipo: fecha creacion, ultima modificacion. etc...



el siguiente ejemplo 'trabaja bien' leyendo los nombres/etiquetas de las hojas de un libro cerrado:
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

-> IMPORTANTE: establece primero en tu proyecto de macros VBA una referencia a la libreria...
-> Microsoft ADO Ext. x.x for DDL and Security
== en un modulo de codigo 'normal' =Sub Nombres_hojas()
Dim Libro As ADOX.Catalog, Hoja As ADOX.Table, Archivo As String, Msj As String
Set Libro = New ADOX.Catalog
Archivo = "Ruta y\Sub-carpetas a tu\Archivo cerrado.xls"
Libro.ActiveConnection = _
"Provider=MSDASQL.1;Data Source=Excel Files;Initial Catalog=" & Archivo
For Each Hoja In Libro.Tables
If Right(Hoja.Name, 1) = "$" Then
If Msj <> "" Then Msj = Msj & vbCr
Msj = Msj & Left(Hoja.Name, Len(Hoja.Name) - 1)
End If
Next
MsgBox Msj
Set Libro = Nothing
End Sub
Respuesta Responder a este mensaje
#2 Héctor Miguel
04/02/2007 - 03:55 | Informe spam
hola [denuevo], Ivan !

para la segunda parte de esta consulta...
... y de paso (como mucho, pero no imprescindible) el valor de otras propiedades tipo: fecha creacion, ultima modificacion. etc...



[exceptuando lo que pudiera implicar el 'etc.'] :))

Sub Info_de_archivo_cerrado()
With CreateObject("Scripting.FileSystemObject")
With .GetFile("c:uta y\sub carpetas a\tu archivo cerrado.xls")
MsgBox .DateCreated & " es la fecha de creacion" & vbCr & _
.DateLastAccessed & " es la fecha del ultimo acceso" & vbCr & _
.DateLastModified & " es la fecha de su ulima modificacion"
End With
End With
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#3 Ivan
04/02/2007 - 03:58 | Informe spam
hola Hector Miguel, muchas gracias

parece'trabajar perfectamente'. Voy a estudiarla un poco y a adaptarla para
hacerle un favor a un amigo.

por cierto, ADO y DAO son otras de mis muchas asignaturas pendientes, por lo
que he intentado indagar un poco (reconozco que muy, muy poco) con F1 pero
no parece devolver ayuda con los elementos de tu codigo (ADOX,
ActiveConnection, etc) ¿hay posibilidad de acceder a algun tipo de ayuda
sobre el tema desde el editor?¿quizas desde Access?. Aunque seguramente no
empiece a mirarlo hasta dentro de un tiempo, me ha picado un poco el
gusanillo.

en cualquier caso, lo dicho, gracias de nuevo y hasta pronto

un saludo
Ivan
Respuesta Responder a este mensaje
#4 Ivan
04/02/2007 - 04:21 | Informe spam
hola Hector Miguel (igualmente de nuevo) muchas gracias otra vez

por lo que veo, creo que el 'etc' (aun no muy definido) se podria cubrir sin
problemas por esta misma via. Con esto me has resuelto dos problemas de
una(dos) tacada. Sigo aumentando mi deuda.

en cuanto a tu otra respuesta, segun te enviaba la mia he recordado una
respuesta tuya a otro consultante, similar (tu respuesta, al menos en cuanto
al uso de ADO) pero referida a trabajar con los datos del libro cerrado.¿
Implicaria esto tener que manejar/controlar ADO, o una vez realizada la
'conexion' (o no se como llamarlo) podria utilizar los datos mediante las
instrucciones comunes de excel, manipulando el archivo sin abrirlo? La
pregunta sobre todo es porque, aunque para ciertas cosas me vendria muy
bien, de momento no quiero dispersarme mas de lo que ya estoy.

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#5 Héctor Miguel
04/02/2007 - 04:41 | Informe spam
hola, Ivan !
__ 1 __
parece 'trabajar perfectamente'. Voy a estudiarla un poco y a adaptarla...



__ 2 __
... ADO y DAO son otras de mis... asignaturas pendientes, por lo que he intentado indagar un poco... con F1
pero no parece devolver ayuda con los elementos de tu codigo (ADOX, ActiveConnection, etc)
hay posibilidad de acceder a algun tipo de ayuda sobre el tema desde el editor?quizas desde Access?.
Aunque seguramente no empiece a mirarlo hasta dentro de un tiempo, me ha picado un poco el gusanillo.



1) existe un 'detalle' que debes tener en consideracion, cuando el nombre de las hojas [p.e.]
-> contiene guiones, espacios o son solo numeros...
-> el signo '$' como parte de las tablas del catalogo NO ES 'necesariamente' el primer caracter a la derecha de la tabla
ya que el nombre completo [incluyendo el signo '$'] queda delimitado por apostrofos :-((
-> es necesario adaptar/modificar/... el codigo de la propuesta anterior +/- a lo siguiente:

Sub Nombres_hojas()
Dim Libro As ADOX.Catalog, Hoja As ADOX.Table, _
Archivo As String, Msj As String, Tmp As String
Set Libro = New ADOX.Catalog
Archivo = "Ruta y\Sub-carpetas a tu\Archivo cerrado.xls"
Libro.ActiveConnection = _
"Provider=MSDASQL.1;Data Source=Excel Files;Initial Catalog=" & Archivo
For Each Hoja In Libro.Tables
Tmp = Application.Substitute(Hoja.Name, "'", "")
If Right(Tmp, 1) = "$" Then
If Msj <> "" Then Msj = Msj & vbCr
Msj = Msj & Left(Tmp, Len(Tmp) - 1)
End If
Next
MsgBox Msj
Set Libro = Nothing
End Sub

2) con relacion a que la ayuda 'en linea' para ADOxxx en vba no siempre aparece 'disponible' [seguramente]...
se debe a que los archivos de la ayuda son archivos *.CHM [compilaciones del 'viejo' sistema de ayuda de windows] :-((
-> una forma de abrilos es ejecutando 'directamente' el archivo *.CHM correspondiente [p.e.] desde el explorador de windows
el que aplica [segun versiones instaladas] lo puedes encontrar en el directorio de archivos compartidos comunes de MS [p.e.]
[en mi caso]: -> c:\archivos de programa\archivos comunes\microsoft shared\office<x>\3082\ado210.chm
donde <x> corresponde al numero de la version instalada de office ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida