ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA

En la entrada anterior hemos comprobado como podemos añadir registros a nuestra base de datos de Access desde Excel, usando VBA y ADO: AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA.

Hoy vamos tratar la manera de eliminar registros en Access desde Excel utilizando la misma técnica. Si tomamos como referencia el ejemplo anterior donde habíamos añadido a nuestra base de datos 3 registros nuevos (en rojo).

ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA3

Ahora debemos buscar la forma de eliminarlos usando una macro similar a la anterior, pero antes, para proceder al borrado, necesitamos tener la información que vamos a borrar en nuestra hoja Excel, así:

ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA2

Y ahora procedemos a escribir este código en nuestro editor de VBA:

Sub DeleteAccess()
Dim conAccess As ADODB.Connection
Dim Destino As String
Dim conExcel As String, obSQL As String
Dim Origen As String
Dim i As Double
'Nombramos las tablas con las que vamos a trabajar
Destino = "[TRABAJADORES]"
Origen = "[EMPLEADOS$]"
Fin = Application.CountA(Range("A:A"))
'iniciamos un bucle que recorra la hoja Empleados (columna A) cada registro que queremos eliminar
For i = 2 To Fin
'Indicamos la conexión Excel
conExcel = "[Excel 8.0;HDR=Yes;DATABASE=F:\COMPAÑIA.xls]." & Origen
'construimos la sentencia SQL, que eliminará cada registro indicado en la variable "i"
obSQL = "DELETE * FROM " & Destino & " WHERE " & Destino & ".Id = " & Cells(i, 1)
'Conectamos con la base de datos de Access y eliminamos
Set conAccess = New ADODB.Connection
With conAccess
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=F:\EMPRESA.accdb;"
.Open
.Execute obSQL
.Close
End With
'iniciamos siguiente bucle
Next i
End Sub

A diferencia de la macro que añadía registros, en esta ocasión he tenido que incorporar un bucle, el motivo es que para eliminar un registro, debemos especificar de cual se trata, en este caso es un Id, pero si se trata de varios no nos serviría el “Where”, a no ser que hagamos referencia a una variable en bucle, de modo que por cada ciclo, identificará el registro a eliminar desde nuestra hoja de excel.

Si solo vais a eliminar un registro, bastaría con que hicieseis referencia a un celda (donde estaría el Id a eliminar) y podríais eliminar el bucle. Pero como creo que lo más normal es que se se tengan que eliminar varios registros, el ejemplo será con bucle.

Una vez que ejecutamos la macro, los registros elegidos se eliminarán

ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA

Por último, para la macro funcione, una vez insertada la macro nuestro editor de VBA debéis marcar en la biblioteca de referencias: Microsoft ActiveX Data Objects 2.8 Library

Y con esto ya tenemos nuestra macro para eliminar registros en Access desde Excel 🙂

Descarga el archivo de ejemplo pulsando en: ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA

Anuncios

7 pensamientos en “ELIMINAR REGISTROS EN ACCESS DESDE EXCEL CON VBA

  1. Pingback: AÑADIR REGISTROS EN ACCESS DESDE EXCEL CON VBA | Excel Signum

  2. Lo felicito por la explicación y los ejercicios que podemos descargar para ver como funcionan las macros de excel con access, soy nuevo en es programación de excel con access y me gustaria seguir aprendiendo, por ejemplo: que los EMPLEADOS de la hoja en excel se puedan borran con el mismo boton al momento de guardar y mantener un correlativo constante para seguir ingresando empleados en el caso que fuera uno o diez, y por otro lado que el boton ELIMINAR que pueda eliminar el empleado que se digite en la hoja excel y no solamente los ultimos que ingresamos. De antemano muchas gracias una vez mas por lo que enseña.
    Saludos

    Me gusta

    • Hola Manuel:

      Me alegro que te resulte útil la web. Sobre lo que me comentas, la macro eliminará cualquier empleado que se indique en el excel y con el mismo ID que tenga en la base de datos. Esto lo puedes ver en la secuencia SQL:

      obSQL = “DELETE * FROM ” & Destino & ” WHERE ” & Destino & “.Id = ” & Cells(i, 1)

      Es decir,que si el ID es el del primer empleado, lo eliminará, no solo los últimos.

      Sobre lo primero, quizás te sea de mayor utilidad este post, donde precisamente comento la informa de ingresar datos desde Excel a access:

      https://excelsignum.com/2016/07/08/anadir-registros-en-access-desde-excel-con-vba/comment-page-1/#comment-1521

      Lee detenidamente este último post, es concretamente lo que necesitas.

      Saludos.

      Me gusta

      • Entonces la secuencia de SQL solo me elimina la cantidad de empleados que tenga agregados en la hoja de excel, pero para borrarlos de la hoja de excel de forma automatica tengo que crear otra macro o puedo agregar alguna secuencia dentro de la macro InsertAccess , o lo debo hacer de forma manual?

        Puedo agregar una secuencia a la macro InsertAccess para que el id correlativo sea de forma automatica en access y no sea necesario agregarlo cada vez que ingreso un empleado en la hoja excel?

        De antemano gracias
        Saludos

        Me gusta

        • Hola Manuel:

          Claro que puedes incorporar una línea de código para eliminar los datos que tengas en la hoja, algo tipo:

          with sheets(1)
          Final = .Range(“A” & Rows.Count).End(xlUp).Row
          .Range(“A2:F” & Final + 2).Clear
          End with

          y lo sitúas al finalizar la macro.

          Sobre el ID y que sea correlativo tengo que estudiarlo con detenimiento.

          Otra alternativa es que exportes a Access la tabla completa directamente
          https://excelsignum.com/2016/03/31/exportar-datos-de-excel-a-access-mediante-ado/

          Y cuando necesites incorporar un empleado y que sea correlativo
          importas el Access:
          https://excelsignum.com/2016/12/09/exportar-una-tabla-o-consulta-de-access-a-excel-con-ado/

          Saludos

          Me gusta

          • Muchas gracias por la ayuda, me podrías indicar como poder dejar un valor negativo en una consulta de acces, ya que estoy creando un balance y cuando resto el DEBE con el HABER en la columna DEUDOR hay valores que me dan negativo, pero esos valores negativos me gustaría que me los dejara en 0, he tratado de agregar varias formulas en la linea de criterio pero no me las acepta. Ej:
            DEBE 80
            HABER 100
            DEUDOR -20

            De antemano gracias

            Me gusta

            • Hola Manuel, eso que me comentas ya es parte de Access y yo programo en Excel. Una macro que te convierta lo valores negativos de una tabla de access en 0.

              En excel sería o bien realizar un condición en formato condicional, o mediante programación, con un loop que recorra todos los valores y cuando sean menores que 0, los convierta en 0.

              Saludos.

              Me gusta

¿Te ha gustado?, Realiza un comentario.

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s