En Macro Excel significado, o cual su función

Quiero que me digas cual es su función dentro de esta macro, que significa o que hace esta línea

If Not b Is Nothing Then
Private Sub lista_Click()
    Dim v   As Variant
    Dim txt As MSForms.TextBox
    Dim i%
    With Sheets("Productos")
        Set b = .Range("A2:A50000").Find(lista.Value, lookat:=xlWhole, LookIn:=xlValues) '.Row 'ANTES B5
        If Not b Is Nothing Then
            v = Array(txtCod, txtProd, txtProve, txtFactu, DTPicker1, txtUbic, txtObser)
            For i = 0 To UBound(v)
                If i = 4 Then
                    DTPicker1 = .Cells(b.Row, i + 1)
                Else
                    Set txt = v(i)
                    txt.Text = .Cells(b.Row, i + 1)
                    Set txt = Nothing
                End If
            Next
        End If
    End With
    Buscar.SetFocus
    'txtCod.Enabled = False
End Sub

Aqui según el comentario, esta claro

'Evita nombre repetido, busca si ya existe en data
Set busco = Sheets("Productos").Range("B:B").Find(txtProd.Text, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then    'significa que lo encontró
    MsgBox ("Este código ya está registrado. Verifica ...."), vbInformation, "Existe"
    'sale sin guardar
    Exit Sub
End If
'xxxxxxxxx

2 respuestas

Respuesta
5

Primero, con "Set b", estableces en el objeto b el resultado de la búsqueda.

Si b está vacío, significa que no encontró información.

Si b no está vacío (if not b is nothing), significa que encontró información.

Respuesta
2

La 2da macro es de mi autoría. Allí comento que esa línea significa que se encontró el registro buscado.

Entonces, en la 1er macro la explicación sería:

 With Sheets("Productos")
        Set b = .Range("A2:A50000").Find(lista.Value, lookat:=xlWhole, LookIn:=xlValues) '.Row 'ANTES B5
        If Not b Is Nothing Then

 - se busca en hoja Productos, en rango definido en col A

- El dato a buscar es el valor de 'lista'

- Si se encontró el dato buscado (if not b is Nothing) entonces continúa el proceso con la hoja Productos hasta encontrar la línea de cierre End With.

NOTA: Utilizando With... ya no se necesita volver a nombrar la hoja sino que se reemplaza con punto. Sería como escribir:

Set b = Sheets("Productos").Range("A2:A50000").Find(lista.Value, lookat:=xlWhole, LookIn:=xlValues)

Son distintas maneras de escribir lo mismo. Espero haber aclarado tu duda.

Hola Elsa, saludos. Pues encontré tu macro y la metí dentro de otra macro para ese fin

Si se entiende la línea

If Not busco Is Nothing Then    'significa que lo encontró

de tu macro pero, de la 1ª macro no se cual funcion ejerce.

Claro que esta metida dentro de Lista_Click, al seleccionar una línea del ListBox, se llenan los TextBox.

¿Será qué al seleccionar una línea del ListBox esa línea la encuentra en la hoja? ¿Y luego llena los TextBox con los datos de la hoja?

Así es, se busca en la hoja el valor seleccionado del listbox ... y si lo encuentra se llenan los textbox con el resto de los campos de ese registro encontrado.

Sdos!

Nada más que escribir, solo desearte una buena semana que se avecina, con un pocode suerte, salud y amor

Gracias, igual para ti !

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas