Traer datos a excel desde Access

Amigos quisiera que me ayudaran con este código ya que no quiero que se traiga los datos a una hoja activa si no que los traiga por ejemplo a la hoja3.

Código:

Sub cmdDatos_Click()

Dim Conexion As ADODB.Connection, _
rst As ADODB.Recordset, _
strSQL As String, _
bytColumna As Byte
' vacio el rango de datos
On Error GoTo cmdDatos_Click_TratamientoErrores

ActiveSheet.Range("A2").Select
Selection.CurrentRegion.Select
Selection.Clear

' creo la conexión
Set Conexion = CreateObject("ADODB.Connection")

' defino el proveedor de la conexión
Conexion.Provider = "Microsoft.Jet.OLEDB.4.0"

' abro la base de datos
Conexion.Open (ActiveWorkbook.Path & "\ATT2000.MDB")

' creo el recordset
Set rst = CreateObject("ADODB.Recordset")

' creo la select
strSQL = "SELECT USERID, Name, HIREDDAY "
strSQL = strSQL & "FROM USERINFO "
strSQL = strSQL & "ORDER BY USERID"

' abro el recordset
rst.Open strSQL, Conexion, adOpenDynamic, adLockOptimistic, adCmdText

' traigo los datos a Excel
If Not (rst.EOF And rst.BOF) Then
ActiveSheet.Range("A1").CopyFromRecordset rst
End If

' cierro todo
If Not rst Is Nothing Then
rst.Close
Set rst = Nothing
End If

Set Conexion = Nothing

' formateo celdas
Selection.CurrentRegion.Select

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlDouble
.Weight = xlThick
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlDouble
.Weight = xlThick
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlThick
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlDouble
.Weight = xlThick
End With
With Selection.Borders(xlInsideVertical)
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.Weight = xlThin
End With

ActiveSheet.Range("A1").Select

cmdDatos_Click_Salir:
On Error GoTo 0
Exit Sub
cmdDatos_Click_TratamientoErrores:

MsgBox "Error " & Err.Number & " en proc. CmdDatos_Click de Documento VBA Hoja1 (" & Err.Description & ")", vbOKOnly + vbCritical
GoTo cmdDatos_Click_Salir
End Sub ' cmdDatos_Click

1 respuesta

Respuesta

1 - Una opción sería que pases de modo oculto a la hoja3 y así el resto del código que hace mención a 'ActiveSheet' no requiere de cambios.

Agrega las líneas en negrita en esta sección de código:

' Vacio el rango de datos
On Error GoTo cmdDatos_Click_TratamientoErrores

Application.ScreenUpdating = False
Sheets("Hoja3").Select

Al finalizar la macro puedes volver a tu hoja. Antes del Exit Sub y antes del End Sub coloca esta línea ajustando el nombre de tu hoja activa:

Sheets("Hoja1").select

2- Otra opción es que definas la hoja al inicio y luego en cada aparición de 'ActiveSheet' utilices esta variable.

Set hojita = Sheets("Hoja3")

Por ej, esta línea quedaría así:

Hojita. Range("A1"). CopyFromRecordset rst

Tendrás que revisar el resto porque debes evitar seleccionarla si tu idea es no moverte de tu hoja activa, por ej, al limpiar el rango las 3 líneas se reducen a esta:

Hojita. Range("A2"). CurrentRegion. Clear

Te queda revisar el resto si vas a optar por esta 2da opción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas