La función Leerdatocerrado no me lee información de planillas xlsm

Tengo una función Leerdatocerrado que tomé de un sitio de internet que funciona perfecto levantando información de planillas xls, pero hace unos días comencé a utilizar las planillas con macros en office 2010 y uso la extensión xlsm y esas no las levanta, vi que en las líneas de código de Leerdatocerrado dice 
Cnn.Open "provider=microsoft.jet.oledb.4.0;data source=" & _

                    ruta & IIf(Right(ruta, 1) <> "\", "\", "") & archivo & _

                    ";extended properties=""excel 8.0;hdr=no"""

Se me ocurre que debe ser aquí donde está el problema, donde dice Excel 8.0, pero la verdad que no se que cambiar si ahí.


Agradezco lo que me puedan ayudar.


Respuesta
Respuesta

hola, Alex !

1) (probablemente) solo hacia falta instalar los MDAC, que son los que permiten la creacion de los objetos "connection" y "recordset", ya que los controladores (oledb) solo requieren que este instalado office (segun version)

2) no comentas si hiciste pruebas con "otros" archivos xlsm (o solo con el que tenia fallas intenas), y las fallas y datos no leibles pudieron ser por diversas causas (desde algun abuso con los estilos y formatos hasta posible corrupcion por algunas tablas dinamicas)

3) una vez "reparado", ni tiene mayor relevancia si lo guardaste con 2007 o 2010 (sigue siendo xlsm)

por lo demas, se entiende que este asunto ha quedado resuelto (?)

saludos,

hector.

¿Le ha sido útil esta respuesta?

Sentimos que no le haya sido de ayuda.

¡Genial! Gracias por los comentarios.

¿Cuál es su nivel de satisfacción con esta respuesta?

Gracias por sus comentarios, nos ayudan a mejorar el sitio.

¿Cuál es su nivel de satisfacción con esta respuesta?

Gracias por los comentarios.

Respuesta
Respuesta

Adjunto el código que tengo en un módulo porque probé los cambios y no funcionó, algo debo estar haciendo mal...

Aclaración: hasta ahora me funcionaba con planillas xls, en este mes de noviembre que terminó tengo planillas xls y xlsm, y estas últimas no me las lee.


hola, Alex !

cuando diseñe la funcion, no tenia la "necesidad" de comprobar su funcionamiento en consultas a archivos de las versiones 2007/2010, pero con las siguientes adaptaciones puedes indicar archivos de las dos variantes: de 97-2003 (*.XLS, *.XLA, etc.) o de 2007 en adelante (*.XLSX, *.XLSM, *.XLSB, etc.)

Function LeerDatoDeArchivoCerrado(ruta As String, archivo As String, hoja As String, ref As String)
  ' uso: = LeerDatoDeArchivoCerrado(“ruta\”,”mi archivo.xls”,“hoja1”,“b5”)
  Dim Cnn As Object, Rec As Object, prov As String, prop As String, ext As Byte
  Set Cnn = CreateObject("adodb.connection")
  Set Rec = CreateObject("adodb.recordset")
  prov = "jet.oledb.4.0": prop = "excel 8.0"
  ext = Len(archivo) - InStrRev(archivo, ".")
  If ext > 3 Then prov = "ace.oledb.12.0": prop = "excel 12.0 xml"
  Cnn.Open "provider=microsoft." & prov & ";data source=" & _
                   ruta & IIf(Right(ruta, 1) <> "\", "\", "") & archivo & _
                   ";extended properties=""" & prop & ";hdr=no"""
  Rec.Open "select * from [" & hoja & "$" & Range(ref).Resize(2, 1).Address(0, 0) & "]", Cnn, 1, 1
  LeerDatoDeArchivoCerrado = Rec(0).Value
  Rec.Close: Set Rec = Nothing
  Cnn.Close: Set Cnn = Nothing
End Function

saludos,

hector.

Esta respuesta le ha sido útil a 2 personas.

·

¿Le ha sido útil esta respuesta?

Sentimos que no le haya sido de ayuda.

¡Genial! Gracias por los comentarios.

¿Cuál es su nivel de satisfacción con esta respuesta?

Gracias por sus comentarios, nos ayudan a mejorar el sitio.

¿Cuál es su nivel de satisfacción con esta respuesta?

Gracias por los comentarios.

 
 

Información de la pregunta


Última actualización: 18 de septiembre de 2023 Vistas 3.238 Se aplica a: