VBA Hallar registro coincidente y modificar

Tengo una plantilla que se rellena con datos y por otro lado, una base de datos (otra hoja Excel) donde se almacenan. Cuando el usuario va a cerrar la plantilla ya rellenada, con un BeforeClose, se guardan los datos en la hoja que almacena los registros.

Lo que necesitaría es que si hay algún error en la hoja rellenada por el usuario, después de abrirla y corregir los datos, al cerrarla esos datos no se guardaran como otro registro distinto al que ya había en la hoja de registros, si no, que encontrara el anterior y sobreescribiera los datos con los corregidos.

He pensado en dar a cada registro (los datos que el usuario meta en la plantilla) un num de Referencia o ID para tener registros únicos. Y que el cerrar la hoja modificada, VB busque en la columna de ID en la hoja de datos almacenados, para que coincide con el de la hoja modificada, situe el cursor en esa línea y sobreescriba la información sin crear otro registro nuevo.

La instrucción debería ser algo como:

1º comprueba si la ID de la plantilla modificada coincide con alguna ID almacenada (se me ocurre algo tipo CountIf(Rango_ID_BaseDatos;Celda_ID_PlantillaModificada)>0

2º si coincide (o sea, el CountIf = 1), sitúa el cursor en esa celda ID y copia los datos en esa línea (en lugar de buscar el último registro y pegarlo debajo). La idea es no almacenar registros duplicados si no poder corregir directamente los existentes

1 Respuesta

Respuesta
1

Vale creo que más o menos ya lo tengo.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'activo la hoja
Hoja1.Activate
'asigno a ID que ya existe el valor resultante de CountIf
ID_existe = Application.WorksheetFunction.CountIf(Range("A:A"), Range("C1"))
'si el CountIf es mayor que 0, o sea, la ID ya existe
If ID_existe > 0 Then
'creo variable seleccion y activo la celda donde se encuentre el valor ingresado en C1
Dim seleccion As Range
Set seleccion = Range("A:A").Find(Range("c1").Value)
seleccion.Activate
End If
End Sub

Ahora solo me quedaría pegar en esa celda los datos corregidos.

De esta manera si ingreso en C1 una ID ya existente en el rango A:A, el CountIf será >0 y se seleccionará la celda del rango A:A que coincida con la ID de C1.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas