Importar libro de excel sin nombre definido

Tengo un código que me importa una Hoja de un libro de excel a access, ahora, necesito no ponerle un nombre específico al libro, que pueda modificarse (por solicitud del cliente) aunque si siga importando la Hoja llamada EXPORTA que existe en ese libro.

El libro se llama ahora "NEW Modelo Produccion Musical.xlsx" y de el importa solo la hoja "EXPORTA" pero pudiera llamarse "Prod Musical EN VIVO 1-6-23.xlsx" y necesito que siga importando solo la hoja "EXPORTA". Quiero decir que como quiera que se nombre el libro si contiene la Hoja EXPORTA que li importe a la base de datos a la tabla "EXPORTA_tmp".

Espero haberme explicado bien. Gracias de antemano

El código

Private Sub CmdImpProgEmit_Click()
Dim i As Integer
Dim FileName As String
' Requiere referencia a Microsoft Office 11.0 Object Library.
Dim fDialog As Office.FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.InitialFileName = CurrentProject.Path & "\NEW Modelo Produccion Musical.xlsx"
.InitialView = msoFileDialogViewDetails
.AllowMultiSelect = False
.Title = "Seleccione el archivo"
.Filters.Clear
.Filters.Add "NEW Modelo Produccion Musical", "*.xlsx"
If .Show = True Then
FileName = .SelectedItems(1)
Else
MsgBox "Ha cancelado la operación.", vbInformation, "Importar Excel a Access"
Exit Sub
End If
End With
If Len(FileName) > 0 Then 'Comprobamos que se haya seleccionado correctamente el archivo.
FileName = fDialog.InitialFileName
DoCmd.TransferSpreadsheet acImport, 10, "EXPORTA_tmp", FileName, True, "EXPORTA!"
If Err.Number = 0 Then
MsgBox "Hojas importadas OK", vbInformation, "Le informo"
End If
Else
MsgBox "No ha seleccionado un archivo para procesar.", vbInformation, "Importar Excel a Access"
End If
End Sub

1 respuesta

Respuesta
1

Para importar la hoja "EXPORTA" de un libro de Excel sin especificar un nombre específico para el libro, puedes hacer uso de la función Dir para buscar todos los archivos en un directorio que cumplan con ciertas características, como tener la extensión ".xlsx" y contener la hoja "EXPORTA". Aquí tienes una modificación de tu código que implementa esta funcionalidad:

Private Sub CmdImpProgEmit_Click()
    Dim FileName As String
    Dim FilePath As String
    Dim file As String
    ' Ruta del directorio donde se encuentran los archivos de Excel
    FilePath = CurrentProject.Path & "\"
    ' Requiere referencia a Microsoft Office 11.0 Object Library.
    Dim fDialog As Office.FileDialog
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .InitialFileName = FilePath
        .InitialView = msoFileDialogViewDetails
        .AllowMultiSelect = False
        .Title = "Seleccione el archivo"
        .Filters.Clear
        .Filters.Add "Archivos de Excel", "*.xlsx"
        If .Show = True Then
            FileName = .SelectedItems(1)
        Else
            MsgBox "Ha cancelado la operación.", vbInformation, "Importar Excel a Access"
            Exit Sub
        End If
    End With
    If Len(FileName) > 0 Then ' Comprobamos que se haya seleccionado correctamente el archivo.
        file = Dir(FilePath & "*.xlsx")
        Do While Len(file) > 0
            If InStr(file, "EXPORTA") > 0 Then ' Verificar si el archivo contiene la hoja "EXPORTA"
                DoCmd.TransferSpreadsheet acImport, 10, "EXPORTA_tmp", FilePath & file, True, "EXPORTA!"
                If Err.Number = 0 Then
                    MsgBox "Hojas importadas OK", vbInformation, "Le informo"
                End If
                Exit Do
            End If
            file = Dir
        Loop
        If Len(file) = 0 Then
            MsgBox "No se encontró ningún archivo que contenga la hoja 'EXPORTA'.", vbInformation, "Importar Excel a Access"
        End If
    Else
        MsgBox "No ha seleccionado un archivo para procesar.", vbInformation, "Importar Excel a Access"
    End If
End Sub

Hola amigo, dice que "no se encontró ningún archivo que contenga la hoja EXPORTA"

 yo uso Microsoft Office 15.0 Object Library, imagino que no tiene nada que ver

Intentalo

Private Sub CmdImpProgEmit_Click()
    Dim FileName As String
    Dim FilePath As String
    Dim file As String
    ' Ruta del directorio donde se encuentran los archivos de Excel
    FilePath = CurrentProject.Path & "\"
    ' Requiere referencia a Microsoft Office 11.0 Object Library.
    Dim fDialog As Office.FileDialog
    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
    With fDialog
        .InitialFileName = FilePath
        .InitialView = msoFileDialogViewDetails
        .AllowMultiSelect = False
        .Title = "Seleccione el archivo"
        .Filters.Clear
        .Filters.Add "Archivos de Excel", "*.xlsx"
        If .Show = True Then
            FileName = .SelectedItems(1)
        Else
            MsgBox "Ha cancelado la operación.", vbInformation, "Importar Excel a Access"
            Exit Sub
        End If
    End With
    If Len(FileName) > 0 Then ' Comprobamos que se haya seleccionado correctamente el archivo.
        file = Dir(FilePath & "*.xlsx")
        Do While Len(file) > 0
            If InStr(file, "EXPORTA") > 0 Then ' Verificar si el archivo contiene la hoja "EXPORTA"
                DoCmd.TransferSpreadsheet acImport, 10, "EXPORTA_tmp", FilePath & file, True, "EXPORTA!"
                If Err.Number = 0 Then
                    MsgBox "Hojas importadas OK", vbInformation, "Le informo"
                End If
                Exit Do
            End If
            file = Dir
        Loop
        If Len(file) = 0 Then
            MsgBox "No se encontró ningún archivo que contenga la hoja 'EXPORTA'.", vbInformation, "Importar Excel a Access"
        End If
    Else
        MsgBox "No ha seleccionado un archivo para procesar.", vbInformation, "Importar Excel a Access"
    End If
End Sub

Asegúrate de tener la referencia correcta a la biblioteca "Microsoft Office 11.0 Object Library" en tu proyecto de Access para evitar errores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas