- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Featured Post
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
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
Límites de versiones antiguas de Excel:
Excel 2003 (.xls) solo soporta:
65,536 filas por hoja
256 columnas (IV) por hoja
Datos demasiado grandes:
Tu tabla de Access contiene más datos que estos límites
Diferencias Clave
Característica Excel 2003 (.xls) Excel 2007+ (.xlsx) Máximo filas 65,536 1,048,576 Máximo columnas 256 (IV) 16,384 (XFD) Tamaño máximo archivo ~65MB ~4GB Formato recomendado No Sí Recomendaciones
Usa formato .xlsx siempre que sea posible - soporta 1,048,576 filas vs 65,536 de .xls
Si debes usar .xls:
Divide los datos en múltiples hojas
Considera filtrar datos innecesarios
Usa
TOPen tu consulta SQL para limitar registros
Para bases MUY grandes:
Considera exportar a CSV en lugar de Excel
O usa una herramienta de ETL profesional como SSIS
Verifica tus datos:
Antes de exportar, revisa cuántos registros tiene tu tabla
SELECT COUNT(*) FROM tu_tabla
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones


Comentarios
Publicar un comentario