Featured Post

Tablas Responsivas con Bootstrap 5 pc escritorio y dispositivos mobiles

EXPORTA TABLA MS ACCESS A EXCEL CON VISUAL BASIC 6 METODO RAPIDO

 

Usar Referencia - Microsoft ActiveX Data Objects 2.0 Library (referencia en el proyecto)


Option Explicit

Public Sub ExportToExcelFastWithPasswordAndOverwrite()
 Dim conn As ADODB.Connection
    Dim connExcel As ADODB.Connection
    Dim strSQL As String
    
    ' Configuración - modifica estos valores
    Dim accessDBPath As String
    Dim tableName As String
    Dim excelFilePath As String
    Dim dbPassword As String
    
    accessDBPath = "C:\bd.mdb"  ' Cambia por tu ruta
    tableName = "demo"                     ' Cambia por el nombre de tu tabla
    excelFilePath = "C:\demo.xls" ' Cambia por tu ruta de destino
    dbPassword = "995511"                     ' Tu contraseña de base de datos
    
    On Error GoTo ErrorHandler
    
    ' Paso 1: Eliminar archivo Excel si ya existe (para permitir sobrescritura)
    If Dir(excelFilePath) <> "" Then
        SetAttr excelFilePath, vbNormal  ' Quitar atributos de solo lectura si los tiene
        Kill excelFilePath               ' Eliminar el archivo existente
    End If
    
    ' Paso 2: Crear conexión a Access con contraseña
    Set conn = New ADODB.Connection
    With conn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .Properties("Data Source") = accessDBPath
        .Properties("Jet OLEDB:Database Password") = dbPassword
        .Open
    End With
    
    ' Paso 3: Crear archivo Excel vacío primero
    Set connExcel = New ADODB.Connection
    connExcel.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & excelFilePath & ";Extended Properties=""Excel 8.0;HDR=YES"";"
    connExcel.Close
    Set connExcel = Nothing
    
    ' Paso 4: Exportar datos
    strSQL = "SELECT * INTO [Excel 8.0;Database=" & excelFilePath & "].[" & tableName & "] FROM [" & tableName & "]"
    conn.Execute strSQL
    
    conn.Close
    
    MsgBox "Exportación rápida completada a " & excelFilePath & vbCrLf & _
           "(Se sobrescribió el archivo si existía)", vbInformation
    Exit Sub
    
ErrorHandler:
    MsgBox "Error durante la exportación:" & vbCrLf & _
           "Número: " & Err.Number & vbCrLf & _
           "Descripción: " & Err.Description, vbCritical
    On Error Resume Next
    If Not connExcel Is Nothing Then If connExcel.State = adStateOpen Then connExcel.Close
    If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close
End Sub


Private Sub Command1_Click()
 
    Call ExportToExcelFastWithPasswordAndOverwrite
    
End Sub

Exportar a Excel desde Access .accdb (Formato Actual) con VB6

Public Sub ExportACCDBToExcelWithOverwrite()
    Dim conn As ADODB.Connection
    Dim connExcel As ADODB.Connection
    Dim strSQL As String
    
    ' Configuración - modifica estos valores
    Dim accessDBPath As String
    Dim tableName As String
    Dim excelFilePath As String
    Dim dbPassword As String
    
    accessDBPath = "C:\ruta\a\basedatos.accdb"  ' Extensión .accdb
    tableName = "MiTabla"
    excelFilePath = "C:\ruta\destino\datos.xls"  ' Puede ser .xls o .xlsx
    dbPassword = "995511"                     ' Contraseña si la base de datos está encriptada
    
    On Error GoTo ErrorHandler
    
    ' Paso 1: Eliminar archivo Excel si existe (para sobrescritura)
    If Dir(excelFilePath) <> "" Then
        SetAttr excelFilePath, vbNormal
        Kill excelFilePath
    End If
    
    ' Paso 2: Crear conexión a Access .accdb
    Set conn = New ADODB.Connection
    With conn
        .Provider = "Microsoft.ACE.OLEDB.12.0"  ' Proveedor para ACCDB
        .Properties("Data Source") = accessDBPath
        If dbPassword <> "" Then
            .Properties("Jet OLEDB:Database Password") = dbPassword
        End If
        .Open
    End With
    
    ' Paso 3: Crear archivo Excel vacío
    Set connExcel = New ADODB.Connection
    
    ' Determinar el formato Excel basado en la extensión del archivo
    Dim excelProvider As String
    If LCase(Right(excelFilePath, 4)) = ".xls" Then
        excelProvider = "Excel 8.0"  ' Excel 97-2003
    Else
        excelProvider = "Excel 12.0" ' Excel 2007+
    End If
    
    connExcel.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & excelFilePath & _
                  ";Extended Properties=""" & excelProvider & ";HDR=YES"";"
    connExcel.Close
    Set connExcel = Nothing
    
    ' Paso 4: Exportar datos
    strSQL = "SELECT * INTO [Excel 12.0;Database=" & excelFilePath & "].[" & tableName & "$] FROM [" & tableName & "]"
    conn.Execute strSQL
    
    conn.Close
    
    MsgBox "Exportación desde ACCDB completada a " & excelFilePath, vbInformation
    Exit Sub
    
ErrorHandler:
    MsgBox "Error durante la exportación:" & vbCrLf & _
           "Número: " & Err.Number & vbCrLf & _
           "Descripción: " & Err.Description & vbCrLf & _
           "Proveedor usado: " & conn.Provider, vbCritical
    On Error Resume Next
    If Not connExcel Is Nothing Then If connExcel.State = adStateOpen Then connExcel.Close
    If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close
End Sub

mas simplificada

Public Sub SimpleExportACCDBToExcel()
    Dim conn As ADODB.Connection
    
    ' Configurar estas variables
    Dim accessDBPath As String: accessDBPath = "C:\ruta\a\basedatos.accdb"
    Dim tableName As String: tableName = "MiTabla"
    Dim excelFilePath As String: excelFilePath = "C:\ruta\destino\datos.xlsx"
    Dim dbPassword As String: dbPassword = "995511"
    
    On Error GoTo ErrorHandler
    
    ' Eliminar archivo existente
    If Dir(excelFilePath) <> "" Then
        Kill excelFilePath
    End If
    
    ' Conectar y exportar
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & accessDBPath & _
              ";Jet OLEDB:Database Password=" & dbPassword & ";"
    
    conn.Execute "SELECT * INTO [Excel 12.0 Xml;Database=" & excelFilePath & "].[" & tableName & "] FROM [" & tableName & "]"
    
    conn.Close
    MsgBox "Exportación completada!", vbInformation
    Exit Sub
    
ErrorHandler:
    MsgBox "Error: " & Err.Description, vbCritical
    If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close
End Sub


///////////////////////////////////////////////////////////

EXPORTA A  Excel 2007+ (.xlsx)


Private Sub Command2_Click()
Call ExportToModernExcel
End Sub


Public Sub ExportToModernExcel()
    Dim conn As ADODB.Connection
    
    ' Configuración
    Dim accessDBPath As String: accessDBPath = "C:\bdkian.mdb"
    Dim tableName As String: tableName = "venta"
    Dim excelFilePath As String: excelFilePath = "venta.xlsx" ' Nota: .xlsx
    Dim dbPassword As String: dbPassword = "995511"
    
    On Error GoTo ErrorHandler
    
    ' Eliminar archivo existente
    If Dir(excelFilePath) <> "" Then Kill excelFilePath
    
    ' Conectar y exportar
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & accessDBPath & _
              ";Jet OLEDB:Database Password=" & dbPassword
    
    ' Usar Excel 12.0 Xml para formato .xlsx
    conn.Execute "SELECT * INTO [Excel 12.0 Xml;Database=" & excelFilePath & "].[" & tableName & "] FROM [" & tableName & "]"
    


 '-------------------------------------------------------------------
    

    Dim tableName2 As String: tableName2 = "detalleventa"
    Dim excelFilePath2 As String: excelFilePath2 = "detalleventa.xlsx" ' Nota: .xlsx
  

    
    ' Eliminar archivo existente
    If Dir(excelFilePath2) <> "" Then Kill excelFilePath
    
    ' Conectar y exportar
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & accessDBPath & _
              ";Jet OLEDB:Database Password=" & dbPassword
    
    ' Usar Excel 12.0 Xml para formato .xlsx
    conn.Execute "SELECT * INTO [Excel 12.0 Xml;Database=" & excelFilePath2 & "].[" & tableName2 & "] FROM [" & tableName2 & "]"
    
    

    
    
'-------------------------------------------------------------------



    conn.Close
    
    MsgBox "Exportación a formato .xlsx completada!", vbInformation
    Exit Sub
    
ErrorHandler:
   MsgBox "Error: " & Err.Description, vbCritical
    If Not conn Is Nothing Then If conn.State = adStateOpen Then conn.Close
End Sub



/////////////////////////////////////////////////////////////


RESEÑA DE LA TEORIA 

Cambios Principales para ACCDB:

    Proveedor OLEDB diferente:

        De Microsoft.Jet.OLEDB.4.0 a Microsoft.ACE.OLEDB.12.0

    Soporte para formatos modernos:

        .accdb para Access

        .xlsx para Excel (además del tradicional .xls)

    Manejo de versiones:

        Detecta automáticamente si el destino es Excel 97-2003 (.xls) o Excel 2007+ (.xlsx)

    Mensajes de error mejorados:

        Incluye información sobre el proveedor usado

Requisitos Adicionales:

    Instalar Access Database Engine:

        Descargar e instalar "Microsoft Access Database Engine 2010 Redistributable" o versión posterior

        Disponible en el sitio web de Microsoft

    Referencias en VB6:

        "Microsoft ActiveX Data Objects 6.1 Library" (o versión más reciente)

        Asegurarse de tener la versión más actualizada posible de ADO

Consideraciones Importantes:

    Compatibilidad:

        El código funciona tanto con .mdb (usando Jet) como con .accdb (usando ACE)

        ACE es el sucesor moderno de Jet

    Rendimiento:

        ACE OLEDB 12.0 suele ser más rápido que Jet para bases de datos grandes

    Seguridad:

        ACE soporta métodos de encriptación más modernos

    Formatos de Excel:

        Para exportar a .xlsx, cambia la extensión del archivo destino

        El código detectará automáticamente el formato a usar

Error "La hoja de cálculo está llena" en Exportación a Excel

Este error ocurre cuando intentas exportar datos que exceden los límites de capacidad de las hojas de Excel. Veamos cómo solucionarlo:

Causas del Error

  1. Límites de versiones antiguas de Excel:

    • Excel 2003 (.xls) solo soporta:

      • 65,536 filas por hoja

      • 256 columnas (IV) por hoja

  2. Datos demasiado grandes:

    • Tu tabla de Access contiene más datos que estos límites      

      Diferencias Clave

      CaracterísticaExcel 2003 (.xls)Excel 2007+ (.xlsx)
      Máximo filas65,5361,048,576
      Máximo columnas256 (IV)16,384 (XFD)
      Tamaño máximo archivo~65MB~4GB
      Formato recomendadoNo

      Recomendaciones

      1. Usa formato .xlsx siempre que sea posible - soporta 1,048,576 filas vs 65,536 de .xls

      2. Si debes usar .xls:

        • Divide los datos en múltiples hojas

        • Considera filtrar datos innecesarios

        • Usa TOP en tu consulta SQL para limitar registros

      3. Para bases MUY grandes:

        • Considera exportar a CSV en lugar de Excel

        • O usa una herramienta de ETL profesional como SSIS

      4. Verifica tus datos:

        • Antes de exportar, revisa cuántos registros tiene tu tabla

        • SELECT COUNT(*) FROM tu_tabla

Comentarios