es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Buscando duplicados en tiempo real mientras el usuario está completando un UserForm, VBA Excel.

Estoy enfrentando un problema. Actualmente estoy utilizando esto para verificar si existe un duplicado en mi tabla:

If Not IsError(Application.Match(Me.txtCompanyName.Value, ws.ListObjects("Companies").ListColumns("company_name").Range, 0)) Then

MsgBox “Ya existe una empresa registrada con este nombre”

Este código se ejecuta al hacer clic en un botón.

Me pregunto si hay alguna manera de verificar en tiempo real si hay duplicados en mi tabla mientras el usuario está escribiendo, en lugar de esperar a que haga clic en el botón, como se puede ver en algunos formularios web. Intenté usar AfterUpdate en Me.txtCompanyName, pero no es realmente en tiempo real.

Gracias por sus respuestas, cualquier ayuda sería muy apreciada.

Saludos.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Excel, VBA, bases de datos y duplicados, recomendaría usar el evento OnChange en lugar de AfterUpdate. El evento OnChange se activa inmediatamente cuando el usuario ingresa, elimina o cambia un valor en el campo de entrada. Esto brindará una retroalimentación en tiempo real al usuario si existe un valor duplicado.

    Puede utilizar el mismo código para verificar si existe un duplicado dentro del evento OnChange. Sin embargo, para obtener un mejor rendimiento, puede limitar el rango de búsqueda solo a las filas que han sido ingresadas o cambiadas por el usuario.

    Aquí tienes un ejemplo de código:

    Private Sub txtCompanyName_Change()
        Dim ws As Worksheet
        Dim searchRange As Range
        Set ws = ThisWorkbook.Worksheets("Sheet1") ' Cambia Sheet1 por el nombre de tu hoja de cálculo
        Set searchRange = ws.ListObjects("Companies").ListColumns("company_name").DataBodyRange.Rows ' Solo buscar en las filas que han sido ingresadas o cambiadas por el usuario
        If Not IsError(Application.Match(Me.txtCompanyName.Value, searchRange, 0)) Then
            MsgBox "Ya existe una empresa registrada con este nombre"
        End If
    End Sub
    

    Reemplaza txtCompanyName por el nombre de tu campo de entrada y Sheet1 por el nombre de tu hoja de cálculo.

    Espero que esta información sea útil.

Comments are closed.