LIBRO se congela al ejecutar macro

Tengo este código en un formulario con un listbox el problema es que se me congela el LIBRO al ejecutar esta macro

Set h2 = Sheets("Clientes")
    folio = CONSULTA_CLIENTE.ListBox1.List(ListBox1.ListIndex, 1)
    If folio = "" Then
        MsgBox "Pon algo en el label"
        Exit Sub
    End If
    Set r = h2.Columns("C")                 'rango de búsqueda
    Set b = r.Find(folio, lookat:=xlWhole)  'busca folio
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'Datos del cliente
        Set b = Sheets("clientes").Columns("C").Find(TextBox2, lookat:=xlWhole)
        If Not b Is Nothing Then
        MsgBox "Este cliente ya esta registrado, Guardalo de direfente manera para continuar", vbExclamation, "INFORMACÍON"
        Exit Sub
        End If
            h2.Cells(b.Row, "C") = TextBox3.Value
            TextBox1.Value = Empty
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    Else
        MsgBox "El folio no existe"
  End If
End Sub

alguna sugerencia?

1 Respuesta

Respuesta
1

No entiendo qué quieres hacer.

Tienes 2 búsquedas diferentes, primero buscas el folio y después buscas el textbox2, no puedes cambiar la búsqueda dentro del ciclo.

Mejor explícame con ejemplos y con imágenes qué quieres hacer y te creo la macro.

Este el código que ocupo para buscar datos de un listbox y cambiar el dato que buscado por el que tiene el textbox3

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Por Dante Amor
Set h2 = Sheets("clientes")
    folio = CONSULTA_CLIENTE.ListBox1.List(ListBox1.ListIndex, 1)
    If folio = "" Then
        MsgBox "Pon algo en el label"
        Exit Sub
    End If
    Set r = h2.Columns("C")                 'rango de búsqueda
    Set b = r.Find(folio, lookat:=xlWhole)  'busca folio
    Set a = r.Find(TextBox3, lookat:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'Datos del cliente
            h2.Cells(b.Row, "C") = TextBox3.Value
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    Else
        MsgBox "El folio no existe"
  End If
End Sub

lo que necesito es que si el dato del textbox3 se repite dentro de la lista col C entonces no me deje realizar el cambio

busco un cliente y selecciono para cambiar sus datos

Y cuando intente poner un mismo cliente en este caso poner otra vez el cliente "ANGEL"

este me salga algo asi:

lo intente con este codigo pero igual se me congela excel

For i = 2 To 1000
If TextBox3.Value = CStr(Hoja2.Cells(i, 3)) Then
MsgBox ("El Cliente ya existe"), vbExclamation
Unload Me
Exit Sub
End If
Next

Supongo que es la base de datos de clientes, entonces, el cliente "jairo", solamente existe una vez en la base de datos.

Si solamente existe una vez, no debes poner un ciclo para buscarlo varias veces, solamente hay que buscarlo una vez.

Entonces queda así:

Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Por Dante Amor
    Set h2 = Sheets("clientes")
    folio = CONSULTA_CLIENTE.ListBox1.List(ListBox1.ListIndex, 1)
    If folio = "" Then
        MsgBox "Pon algo en el label"
        Exit Sub
    End If
    Set r = h2.Columns("C")                     'rango de búsqueda
    'Busca el nuevo cliente
    Set b = r.Find(TextBox3, lookat:=xlWhole)
    If Not b Is Nothing Then
        'si ya existe
        MsgBox "El Cliente ya existe", vbExclamation
        Unload Me
        Exit Sub
    End If
    '
    Set b = r.Find(folio, lookat:=xlWhole)      'busca folio (nombre anterior)
    If Not b Is Nothing Then
        'Datos del cliente
        H2. Cells(b.Row, "C") = TextBox3.Value   'poner el nuevo nombre
                                                'tel
                                                'dir
                                                'col
        MsgBox "Datos actualizados"
        Unload Me
    End If
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas