Error para exportar datos o de access a tabla de excel


Hola Experto Ralvaradot buenos tardes, nuevamente molestándote con este proyecto de exportar ciertos datos de acrchivo de access a excel, en el correo pasado me indicaste que pusiera este código porque salio el error "424 se requiere objeto"
Te falta:
Dim Conex As ADODB.Connection
Antes de la linea que subrayste y colocaste en negrita.

El cual correji y quedo de esta manera:
Dim Conex As ADODB.Connection
Conex.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ruta & "\" & basededatos)
Pero al momento de su ejecución me marca otro nuevo error de compilación "No se ha definido el tipo definido por el usuario" de favor me puedes apoyar, a continuación te transcribo el código (ojala y puedas, de favor revisarlo para ver si esta correcto y que no se presente otro error), en líneas abajo te indico el error en negritas, de antemano gracias.
Nota: En caso de requerir el archivo completo, para que hagas favor de revisar te lo envío por Winrar, de favor me indicas a que correo.
Sub ConectarAccess()
End Sub
Public Sub cmdConectarAccess()
Dim DBFullName As String
Dim Cnct As String, Src As String
Dim Conex As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim IngTablas As Long
Dim i As Long
strDB = ThisWorkbook.Path & "\" & "AdministraciónCarterabd1.mdb"
' Nombre de los archivos de access
' construyo la primera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Plazo" & _
"FROM 4FormularioResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
For Each Campo In rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
xls.ActiveSheet.Cells(3, 3) = Campo.Plazo
' construyo la segunda cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3DetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
xls.ActiveSheet.Cells(3, 4) = Campo.FechaInicial
' construyo la tercera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 4ResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Range("J3:J26") = Campo.ImporteMinistrado
' construyo la cuarta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3FormularioDetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' construyo la quinta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5FormularioResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' construyo la sexta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5ResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.ActiveSheet.Range("K3:K26") = Campo.ImportedelPago
' construyo la septima cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo" & _
"FROM 4FormularioDetalleAmortización ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' crear la conexión
Set Connection = New ADODB.Connection
Set recSet = New ADODB.Recordset
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"
End Sub
Sub ImportarAccess()
Dim ruta As String
Dim basededatos As String
' ruta
ruta = ThisWorkbook.Path
basededatos = " AdministraciónCarterabd1.mdb "
Dim Conex As ADODB.Connection
Conex.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ruta & "\" & basededatos)
' abrir el libro Exportar a Excel
strLibro = CurrentProject.Path & "\TablaAmortización.xlsm"
xls.Workbooks.Open (strLibro)
' visible o no
xls.Visible = False ' o false
' activo la hoja de excel denominda "TablaAmortización"
xls.Worksheets("\TablaAmortización.xlsm").Activate
' consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, Connection
' Copiar datos a la hoja
ActiveSheet.Cells(3, 1).CopyFromRecordset recSet
' Copiar rótulos
IngCampos = recSet.Fields.Count
For i = 0 To IngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
End Sub
Sub DesconectarAccess()
' Desconectar
recSet.Close: Set recSet = Nothing
End Sub

1 respuesta

Respuesta
1
Todo For o For Each debe tener un NEXT, y en tu codigo le debe faltar a alguno
Hola Experto Ralvaradot del error de compilación "No se ha definido el tipo definido por el usuario" que te envíe en la pregunta anterior, ingrese a la ayuda de la red y decía que ingresando a menu/Herramientas/Referencia se puede activar las referencias, por lo que active las siguientes referencias:
* Microsoft ActiveX Data Objects 2.8
* Microsoft ActiveX Data Objects Recordset 2.8 Library
Por lo que considero que se eliminó el error anterior, pero ahora me marca error de compilación: For sin Next, te reenvío el código y subrayado en negritas el nuevo error, agradeciendo de antemano tu apoyo, saludos.
Sub ConectarAccess()
End Sub
Public Sub cmdConectarAccess()
Dim DBFullName As String
Dim Cnct As String, Src As String
Dim Conex As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim IngTablas As Long
Dim i As Long
strDB = ThisWorkbook.Path & "\" & "AdministraciónCarterabd1.mdb"
' Nombre de los archivos de access
' construyo la primera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Plazo" & _
"FROM 4FormularioResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
For Each Campo In rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
xls.ActiveSheet.Cells(3, 3) = Campo.Plazo
' construyo la segunda cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3DetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
xls.ActiveSheet.Cells(3, 4) = Campo.FechaInicial
' construyo la tercera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 4ResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Range("J3:J26") = Campo.ImporteMinistrado
' construyo la cuarta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3FormularioDetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' construyo la quinta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5FormularioResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' construyo la sexta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5ResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.ActiveSheet.Range("K3:K26") = Campo.ImportedelPago
' construyo la septima cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo" & _
"FROM 4FormularioDetalleAmortización ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Fields
xls.ActiveSheet.Cells(3, 1) = Campo.NoControl
xls.ActiveSheet.Cells(3, 2) = Campo.CréditoNo
' crear la conexión
Set Connection = New ADODB.Connection
Set recSet = New ADODB.Recordset
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"
End Sub
Sub ImportarAccess()
Dim ruta As String
Dim basededatos As String
' ruta
ruta = ThisWorkbook.Path
basededatos = " AdministraciónCarterabd1.mdb "
Dim Conex As ADODB.Connection
Conex.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ruta & "\" & basededatos)
' abrir el libro Exportar a Excel
strLibro = CurrentProject.Path & "\TablaAmortización.xlsm"
xls.Workbooks.Open (strLibro)
' visible o no
xls.Visible = False ' o false
' activo la hoja de excel denominda "TablaAmortización"
xls.Worksheets("\TablaAmortización.xlsm").Activate
' consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, Connection
' Copiar datos a la hoja
ActiveSheet.Cells(3, 1).CopyFromRecordset recSet
' Copiar rótulos
IngCampos = recSet.Fields.Count
For i = 0 To IngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
End Sub
Sub DesconectarAccess()
' Desconectar
recSet.Close: Set recSet = Nothing
End Sub
Hola experto, buenas tardes corregí lo que me indicaste, y agregue variables las cuales te lo indico en cursiva pero ahora me indica el siguiente error de compilación: atributo no válido en Sub o en Function, la verdad es que estoy aprendiendo y me cuesta trabajo ciertas cosas, por lo que de favor me ayudas a corregirlo, gracias, saludos.
Sub ConectarAccess()
Global Connection As New ADODB.Connection (Atributo no válido en Sub o en Function)
Global recSet As New ADODB.Connection
Global xls As New Excel.Application

End Sub
Public Sub cmdConectarAccess()
Dim DBFullName As String
Dim Cnct As String, Src As String
Dim Conex As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim IngTablas As Long
Dim i As Long
Dim Campo
Dim rst As Recordset
strDB = ThisWorkbook.Path & "\" & "AdministraciónCarterabd1.mdb"
' Nombre de los archivos de access
' construyo la primera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Plazo" & _
"FROM 4FormularioResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
For Each Campo In rst.Field
Next
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
xls.ActiveSheet.Cells(3, 3) = "rstPlazo"
' construyo la segunda cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3DetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
xls.ActiveSheet.Cells(3, 4) = "rstFechaInicial"
' construyo la tercera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 4ResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Range("J3:J26") = "rstImporteMinistrado"
' construyo la cuarta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3FormularioDetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' construyo la quinta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5FormularioResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' construyo la sexta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5ResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.ActiveSheet.Range("K3:K26") = "rstImportedelPago"
' construyo la septima cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo" & _
"FROM 4FormularioDetalleAmortización ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' crear la conexión
Set Connection = New ADODB.Connection
Set recSet = New ADODB.Recordset
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"
End Sub
Sub ImportarAccess()
Dim ruta As String
Dim basededatos As String
Dim strLibro As String
Dim strTabla As String
Dim strSQL As String
Dim IngCampos As Integer
Dim i As Integer
' ruta
ruta = ThisWorkbook.Path
basededatos = " AdministraciónCarterabd1.mdb "
Dim Conex As ADODB.Connection
Conex.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ruta & "\" & basededatos)
' abrir el libro Exportar a Excel
strLibro = CurrentProject.Path & "\TablaAmortización.xlsm"
xls.Workbooks.Open (strLibro)
' visible o no
xls.Visible = False ' o false
' activo la hoja de excel denominda "TablaAmortización"
xls.Worksheets("\TablaAmortización.xlsm").Activate
' consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, Connection
' Copiar datos a la hoja
ActiveSheet.Cells(3, 1).CopyFromRecordset recSet
' Copiar rótulos
IngCampos = recSet.Fields.Count
For i = 0 To IngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
End Sub
Sub DesconectarAccess()
' Desconectar
recSet.Close: Set recSet = Nothing
End Sub
El tema es que no puedes declarar variables Global dentro de un procedimiento, debes hacerlo a nivel de formulario o de modulo (module)
Disculpa desconocimiento, quiere decir que lo elimino
Sub ConectarAccess()
Global Connection As New ADODB.Connection    "lo elimino"   
Global recSet As New ADODB.Connection
            
"lo elimino"
Global xls As New Excel.Application
                       "lo elimino"
End Sub
lo dejo como estaba
Sub ConcectarAccess()
End Sub
o abro otro modulo y lo copio, así de esta forma, con eso es suficiente? o que es lo que me recomiendas "lo siento pero estoy aprendiendo, te agradecería tu comprensión sobre este proyecto", a veces uno se desespera pero sé que hay que ser paciente, sobre todo cuando desconoces muchas cosas.
Global Connection As New ADODB.Connection
Global recSet As New ADODB.Connection
Global xls As New Excel.Application
De favor me puedes indicar que debo de hacer al respecto, en caso de que consideres necesario te puedo enviar el archivo de access y de excel, saludos
no, es colocarlas por fuera de un Sub
De favor me lo puedes ejemplificar, con base al último código que te envíe, es que no se como hacerlo, gracias.
Global Connection As New ADODB. Connection "lo elimino"
Global recSet As New ADODB. Connection "lo elimino"
Global xls As New Excel. Application "lo elimino"
Sub ConcectarAccess()
End Sub
Ahora marca el siguiente error en tiempo de ejecución: "Variable de objeto o bloque With no establecido" te lo indico con negritas
Una pregunta Ralvaradot ¿por qué salen tantos errores, ya que vez que corrijo, sale otro, y del cual te agradezco tu paciencia ya que sin ella nunca hubiera llegado hasta acá?, de verdad lamento tantas molestias.
Así va el código, es el último
Global Connection As New ADODB.Connection
Global recSet As New ADODB.Connection
Global xls As New Excel.Application
Sub ConectarAccess()
End Sub
Public Sub cmdConectarAccess()
Dim DBFullName As String
Dim Cnct As String, Src As String
Dim Conex As ADODB.Connection
Dim recSet As ADODB.Recordset
Dim strDB, strSQL As String
Dim strTabla As String
Dim IngTablas As Long
Dim i As Long
Dim Campo
Dim rst As Recordset
strDB = ThisWorkbook.Path & "\" & "AdministraciónCarterabd1.mdb"
' Nombre de los archivos de access
' construyo la primera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Plazo" & _
"FROM 4FormularioResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
For Each Campo In rst.Field
Next
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
xls.ActiveSheet.Cells(3, 3) = "rstPlazo"
' construyo la segunda cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3DetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
xls.ActiveSheet.Cells(3, 4) = "rstFechaInicial"
' construyo la tercera cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 4ResumenMinistraciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Range("J3:J26") = "rstImporteMinistrado"
' construyo la cuarta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, FechaInicial" & _
"FROM 3FormularioDetalleMinistración ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' construyo la quinta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5FormularioResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' construyo la sexta cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo, Mes" & _
"FROM 5ResumenAmortizaciónMensual ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.ActiveSheet.Range("K3:K26") = "rstImportedelPago"
' construyo la septima cadena de la SELECT
strSQL = "SELECT NoControl, CréditoNo" & _
"FROM 4FormularioDetalleAmortización ORDER BY NoControl"
xls.ActiveSheet.Range("A1:R26").Select
rst.Field
xls.ActiveSheet.Cells(3, 1) = "rstNoControl"
xls.ActiveSheet.Cells(3, 2) = "rstCréditoNo"
' crear la conexión
Set Connection = New ADODB.Connection
Set recSet = New ADODB.Recordset
Connection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source =" & strDB & ";"
End Sub
Sub ImportarAccess()
Dim ruta As String
Dim basededatos As String
Dim strLibro As String
Dim strTabla As String
Dim strSQL As String
Dim IngCampos As Integer
Dim i As Integer
' ruta
ruta = ThisWorkbook.Path
basededatos = " AdministraciónCarterabd1.mdb "
Dim Conex As ADODB.Connection
Conex.Open ("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ruta & "\" & basededatos)
' abrir el libro Exportar a Excel
strLibro = CurrentProject.Path & "\TablaAmortización.xlsm"
xls.Workbooks.Open (strLibro)
' visible o no
xls.Visible = False ' o false
' activo la hoja de excel denominda "TablaAmortización"
xls.Worksheets("\TablaAmortización.xlsm").Activate
' consulta SQL
strSQL = "SELECT * FROM " & strTabla & ""
recSet.Open strSQL, Connection
' Copiar datos a la hoja
ActiveSheet.Cells(3, 1).CopyFromRecordset recSet
' Copiar rótulos
IngCampos = recSet.Fields.Count
For i = 0 To IngCampos - 1
ActiveSheet.Cells(1, i + 1).Value = recSet.Fields(i).Name
Next
End Sub
Sub DesconectarAccess()
' Desconectar
recSet.Close: Set recSet = Nothing
End Sub
Te recomiendo que estudies la sintaxis de visual basic, estas haciendo cosas mal y Vb solo hasta el momento e compilar te muetsra los errores.
El error es parecido al del for, haces un with y no haces end with
Revisa www.elguille.info allí hay un excelente curso de VB6
Experto, gracias por tu apoyo voy a ser lo que me indicas por lo que voy a cerrar la pregunta y en caso de duda te vuelco a molestar, gracias, saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas