Relacionar exccel con access

¿Cómo puedo crear un botón en una hoja de excel para que al pulsarlo me actualize una base de datos ya existenete?

1 Respuesta

Respuesta
1
Supongo que los datos los tienes en Excel y quieres enviarlos a una base de datos Access, hay varias maneras de hacerlo pero en este ejemplo uso ADO, no especificas mucho pero estoy asumiendo que sabes como copiar la macro y como asignarla a un botón para ejecutarla, saludos...
Mauricio
Option Explicit
Public Sub ActualizarLista()
Dim adoCon As ADODB.Connection
Dim adoRst As ADODB.Recordset
Dim strBase As String
Dim strSql As String
Dim Res As Integer
Dim strInfo As String
Dim Anterior As Long
Dim Actual As Long
Dim NumDir As Integer
Dim CorreoB As String
Dim co1 As Integer
'Tienes que poner la ruta correcta de tu base de datos
strBase = "C:\Archivos de programa\Registros\ListaCorreo.mdb"
'De todos modos verificamos que exista la base de datos
If Dir(strBase) <> "" Then
'Creamos una nueva instancia para la conexion
Set adoCon = New ADODB.Connection
'Abrimos la conexion a la base de datos
adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & strBase
'Creamos una nueva instancia del recordset
Set adoRst = New ADODB.Recordset
'Establecemos el cursor en el cliente
adoRst.CursorLocation = adUseClient
'Contruimos la cadena SQL, esta es solo para contar los registros actuales
strSql = "SELECT COUNT(Clave) AS Claves FROM tblDatos"
'Abrimos el recordset
adoRst.Open strSql, adoCon, adOpenDynamic, adLockPessimistic
'Contamos el numero de direcciones a actualizar
NumDir = Range("A1").End(xlDown).Row - 1
'Contruimos el mensaje de informacion
strInfo = "Actualmente la base de datos tiene " & adoRst!Claves & " direcciones" & vbCrLf & _
"Se intentaran agregar " & NumDir & " nuevas direcciones" & vbCrLf & vbCrLf & _
"¿Proceder con la actualización?"
'Mostramos el mensaje y solicitamos confirmacion
Res = MsgBox(strInfo, vbYesNo + vbQuestion)
'Si responden que si continuamos
If Res = vbYes Then
'Guardamos el numero de registros actuales
Anterior = Val(adoRst!Claves)
'Cerramos el recordset
adoRst.Close
'Hacemos un ciclo en todas las filas a agregar
For co1 = 2 To NumDir + 1
'Mostramos informacion en la barra de estado
Application.StatusBar = "Procesando el registro " & Format(co1 - 1)
'Obtenemos el correo a agregar
CorreoB = Cells(co1, 2).Value
'Contruimos la consulta SQL de seleccion, esta consulta nos sirve
'para no agregar correos repetidos
strSql = "SELECT Correo FROM tblDatos WHERE Correo='" & CorreoB & "'"
'Abrimos la consulta
adoRst.Open strSql, adoCon, adOpenDynamic, adLockPessimistic
'Si existe al menos uno, quiere decir que no se tiene que agregar
If adoRst.RecordCount > 0 Then
'Mostramos la informacion en la misma fila, en una columna libre
Cells(co1, 5).Value = "Existente NO agregado"
Else
'Gartantizamos que el recordset este cerrado
If adoRst.State = 1 Then adoRst.Close
'Contruimos la cadena SQL para "insertar" un nuevo registro
strSql = "INSERT INTO tblDatos (Nombre, Correo, Residencia, Fecha, Envio, Ciudad) " & _
"VALUES ('" & Cells(co1, 1).Value & "','" & _
Cells(co1, 2).Value & "','" & _
Cells(co1, 3).Value & "',#" & _
Format(Date, "d-m-yyyy") & "#, -1,'" & _
Cells(co1, 4).Value & "');"
'Abrimos el recordset
AdoRst. Open strSql, adoCon, adOpenDynamic, adLockPessimistic
'Info
'Contruimos la cadena SQL para "insertar" un nuevo registro
strSql = "INSERT INTO tblDatos (Nombre, Correo, Residencia, Fecha, Envio, Ciudad) " & _
"VALUES ('" & Cells(co1, 1).Value & "','" & _
Cells(co1, 2).Value & "','" & _
Cells(co1, 3).Value & "',#" & _
Format(Date, "d-m-yyyy") & "#, -1,'" & _
Cells(co1, 4).Value & "');"
'Abrimos el recordset
adoRst.Open strSql, adoCon, adOpenDynamic, adLockPessimistic
'Informamos que se agrego
Cells(co1, 5).Value = "Agregado correctamente"
End If
'Garantizamos que el recordset este cerrado
If adoRst.State = 1 Then adoRst.Close
Next co1
'Garantizamos que el recordset este cerrado
If adoRst.State = 1 Then adoRst.Close
'Contruimos la cadena SQL para saber cuantos registros hay
strSql = "SELECT COUNT(Clave) AS Claves FROM tblDatos"
'Abrimos el recordset
adoRst.Open strSql, adoCon, adOpenDynamic, adLockPessimistic
'Tomamos el numero actual de registros
Actual = Val(adoRst!Claves)
'Liberamos la barra de estado
Application.StatusBar = False
'Cerramos el recordset
AdoRst. Close
'Cerramos la conexión
AdoCon. Close
'Liberamos la memoria
Set adoRst = Nothing
Set adoCon = Nothing
'Mostramos la información del preceso
MsgBox "Originalmente habia " & Anterior & " direcciones" & vbCrLf & _
"Se agregaron " & Actual - Anterior & " direcciones" & vbCrLf & _
"Para un total de " & Actual & " direcciones", vbInformation, "Proceso terminado con éxito"
Else
MsgBox "Proceso cancelado"
End If
Else
MsgBox "No se encontro la base de datos"
End If
End Sub
******************************
La presente respuesta a demandado
Un tiempo de análisis y pruebas,
a cambio solo te pido que FINALICES
la pregunta, si resolvió an
alguna medida tu duda...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas