** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Importar hojas Excel con nombres diferentes
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoImportar hojas Excel con nombres diferentes

 Responder Responder
Autor
Mensaje
Peter Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Octubre/2005
Localización: Alemania
Estado: Sin conexión
Puntos: 280
Enlace directo a este mensaje Tema: Importar hojas Excel con nombres diferentes
    Enviado: 18/Febrero/2020 a las 17:26
Tengo un archivo Excel que aunque se actualiza cada mes, siempre se llama igual y se encuentra en la misma ruta.
Este archivo contiene una única hoja, que siempre se llama de manera diferente, porque se genera con la fecha de download.

Ejemplo:

Archivo:  Nombre_archivo.xlsx    
hoja:     download_20200218

El siguiente mes, el archivo se llamará igual, pero la hoja tendrá un nombre diferente:

Archivo:  Nombre_archivo.xlsx    
hoja:     download_20200318

y así sucesivamente.

Deseo importar cada mes este mismo archivo creando en Access siempre una tabla nueva que se llame igual que la hoja Excel.

Por ejemplo, las tablas Access deberían llamarse:

download_20200218
y
download_20200318

¿Cómo puede hacerse esto?
Agradezco de antemano la ayuda
Peter
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14732
Enlace directo a este mensaje Enviado: 18/Febrero/2020 a las 18:48
Mira la ayuda para DoCmd.TransferSpreadsheet

Creo que es lo que estás buscando.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
Peter Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Octubre/2005
Localización: Alemania
Estado: Sin conexión
Puntos: 280
Enlace directo a este mensaje Enviado: 19/Febrero/2020 a las 10:05
Hola Xavi.

Gracias por tu respuesta.

Efectivamente, con ese método es posible importar el archivo.

Mi problema: lograr que la tabla a generarse sea nombrada dinámicamente. El archivo de origen se llamará siempre igual y estará siempre ubicado siempre en el mismo lugar, pero la tabla Access importada debe llamarse tal como la hoja Excel (Excel sheet/Worksheet) se llame en el momento de la importación. Eso no lo consigo

¿Cómo modificar el siguiente código (que funciona, pero que nombra a la tabla tal como se llama el archivo y no la hoja -siempre hay en el archivo Excel una hoja única-) para lograr lo que deseo?


Dim PATH As String


PATH = "C:\Archivo.xlsx"

 

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, PATH, True

Exit Sub

 



Editado por Peter - 19/Febrero/2020 a las 10:12
Peter
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 19/Febrero/2020 a las 10:29
Hola
Tendrás que crearte una variable de tipo string que contenga el nombre del archivo, y concatenarla a la ruta antes de procesarla.
El asunto es ¿el usuario va a seleccionar ese archivo a mano, o será de forma automática? y de ser de esta segunda forma ¿que criterios se seguiran para hacerlo?

Salu2,
Arriba
Peter Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Octubre/2005
Localización: Alemania
Estado: Sin conexión
Puntos: 280
Enlace directo a este mensaje Enviado: 19/Febrero/2020 a las 11:21
Hola Maverick.

Gracias por tu intervención.

El nombre del archivo a importar es fijo (Archivo.xlsx), el nombre de la hoja Excel a importar es variable y se genera automáticamente, es decir: ya está disponible a la hora de querer realizar la importación y nunca se repite. No le veo sentido a crear en Access un nombre que ya está disponible como nombre de la hoja Excel a importar (para mayor explicación mira, por favor, el texto de mi pregunta). ¿O he entendido mal tu idea? Lo que deseo, es que al importar se utilice el nombre de la hoja Excel para nombrar así a la tabla Access importada.

El archivo se selecciona automáticamente.  Seleccionarlo a mano sería poco práctico ya que está siempre en la misma ruta y se llama siempre igual. Los criterios los puedes ver el código escrito en mi intervención anterior.

Peter
Arriba
prga Ver desplegable
Moderador
Moderador


Unido: 16/Noviembre/2004
Localización: España
Estado: Sin conexión
Puntos: 3523
Enlace directo a este mensaje Enviado: 19/Febrero/2020 a las 13:13
Hola.
Si he entendido bien, el siguiente código saca el nombre de la hoja (downloadXXXXXX) de un libro excel llamado archivo.xlsx.

Public Sub nombrehoja()
Dim mico As Object
Dim strcon As String
Dim mishojas As Object
Dim mfichero As String
Dim nomhoja As String
mfichero = CurrentProject.Path & "\archivo.xlsx"
DoEvents
Set mishojas = CreateObject("adodb.recordset")
Set mico = CreateObject("adodb.connection")
strcon = "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & mfichero & ";"
strcon = strcon & "Extended Properties='Excel 12.0;HDR=NO;IMEX=1';"
mico.ConnectionString = strcon
mico.Open
Set mishojas = mico.OpenSchema(20) 'adSchemaTables
mishojas.MoveFirst
Do Until mishojas.EOF
If InStr(mishojas.Fields("TABLE_NAME"), "download") <> 0 Then
   nomhoja = mishojas.Fields("TABLE_NAME")
   Exit Do
  End If
mishojas.MoveNext
Loop
MsgBox (Replace(nomhoja, "$", ""))
mishojas.Close

mico.Close
Set mico = Nothing
Set mishojas = Nothing

End Sub

El código está puesto a título de ejemplo y tiene falta de depurar, optimizar etc etc.
En un principio el código serviría incluso sin tener el excel instalado.
Seguro que hay formas más sencillas de obtener ese nombre, pero....
Espero que sea lo que se pide.
Ya comentas.
Un saludo a todos


Arriba
fcoval Ver desplegable
Asiduo
Asiduo


Unido: 19/Enero/2013
Estado: Sin conexión
Puntos: 225
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 09:33
Te pongo otra forma para poder sacar el nombre de la hoja del fichero Excel:



Sub SacarNombreHojasFicheroExcel()

Dim FicheroExcel As String
FicheroExcel = CurrentProject.Path & "\archivo.xlsx"

Dim objExcel As Object
Dim ObjW As Object
       
Set objExcel = CreateObject("Excel.Application")
Set ObjW = objExcel.Workbooks.Open(FicheroExcel)
'objExcel.Visible = True 'lo hacemos visible
objExcel.Visible = False 'lo hacemos invisible


Dim i As Integer, x As Integer
    
x = ObjW.Sheets.Count

For i = 1 To x 'Te enumera las distintas hojas del Libro excel
   Debug.Print ObjW.Sheets(i).Name
Next


ObjW.Close SaveChanges:=False
Set ObjW = Nothing
objExcel.Quit
Set objExcel = Nothing


End Sub



Editado por fcoval - 20/Febrero/2020 a las 09:34
Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 2085
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 18:57
Hola,
Quizás diga una tonteria, pero si conoces de antemano el nombre de la hoja y que cada mes se incrementa por lo que veo con el numero de mes, consulta la fecha mayor guardada y procede.
el año es =year()?...

Saludos, ximo

La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5972
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 23:02


Teniendo en cuenta que « Este archivo contiene una única hoja... », el nombre es tan sencillo como:


nombre = worksheets(1).name




Saludos desde Tenerife.
Arriba
Peter Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 27/Octubre/2005
Localización: Alemania
Estado: Sin conexión
Puntos: 280
Enlace directo a este mensaje Enviado: 20/Junio/2020 a las 16:17
Estimados amigos. Por motivos de la pandemia no estoy yendo a la oficina donde tengo los datos correspondientes. No podré contestar sino hasta julio de 2020. Agradezco vuestra ayuda y comprensión.  Cordiales saludos.
Peter
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable