Excel - UseFORM CON 2 CAMPOS DE BUSQUEDA PARA DISTINTOS RANGOS

 
Vista:
sin imagen de perfil
Val: 196
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

UseFORM CON 2 CAMPOS DE BUSQUEDA PARA DISTINTOS RANGOS

Publicado por Quico (91 intervenciones) el 23/02/2019 09:18:07
Esta macro tiene una columna B y D de datos. Existe una macro funcional que busca la comparación, pero he creado una macro 'BUSCAR DATOS' para localizar ¿donde se situa un dato, o incluso saber si aparece en alguna de las columnas.
Al ejecutar la 'UseForm' se nos muestra:
1. 'Campo de busqueda de valores de columna B' ---> TextBox1
2. 'Campo de busqueda de valores de columna D' ---> TextBox2

A su vez, existen 2 botones programados para realizar 2 acciones:
a. "¿Existe en la lista?" ---> CommandButton1
b. "Lozalizador" (que simplemente se situa en la celda del valor)---> CommandButton2

Y por último, y condicionado por el botón "¿Existe en la lista?" (CommandButton1) hay distintos mensajes de respuesta sobre 'SI existe y donde esta' o 'No existe el valor' --->lblMensaje

Bueno, he creado la macro y para variar tengo algunos problemas.
1. Buscar Columna B + Valor que existe --> El mensaje esta cruzado a columna D y dice NO existe.
Buscar Columna B + Valor que NO existe --> El mensaje esta cruzado a columna D

2. Buscar Columna D + Valor que existe --> Funciona perfectamente mensaje.
Buscar Columna D + Valor que NO existe --> Funciona perfectamente mensaje.

3. LOCALIZADOR Columna B o D --> Fallo de variable.

¿Alguien podría mirar que me he dejado en el código para estos errores?
Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.160
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

UseFORM CON 2 CAMPOS DE BUSQUEDA PARA DISTINTOS RANGOS

Publicado por Antoni Masana (1454 intervenciones) el 24/02/2019 19:43:15
Haces cosas muy raras.

Haces dos búsquedas simultaneas en la columna B y en la D:
1º - sin verificar si los TextBox hay datos,
2º - la respuesta del los dos casos se escriben en el mismo sitio,

Te pongo los cambios en el Botón 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Private Sub CommandButton1_Click()
    Dim buscoColB
    Dim buscoColD
    Dim NombreColB As String
    Dim NombreColD As String
    Dim RangoColB As String
    Dim RangoColD As String
 
    RangoColB = "B7:B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    RangoColD = "D7:D" & ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row
 
    If Not TextBox1.Text = Empty Then
       Set buscoColB = ActiveSheet.Range(RangoColB).Find(What:=TextBox1.Text, LookAt:=xlPart)  '<--De esta manera nos lo encuentra con solo poner los números del indentificador.
 
       If Not buscoColB Is Nothing Then
          lblMensaje_B.Caption = "Si se ha encontrado el 'Story ID' en Columna B. "
       Else
          lblMensaje_B.Caption = "No se ha encontrado el 'Story ID' en Columna B."
       End If
       TextBox1.SetFocus
    End If
 
    If Not TextBox2.Text = Empty Then
       Set buscoColD = ActiveSheet.Range(RangoColD).Find(What:=TextBox2.Text, LookAt:=xlPart)  '<--De esta manera nos lo encuentra con solo poner los números del indentificador.
 
       If Not buscoColD Is Nothing Then
          lblMensaje_D.Caption = "Si se ha encontrado el 'Story ID' en Columna D. "
       Else
          lblMensaje_D.Caption = "No se ha encontrado el 'Story ID' en Columna D."
       End If
       TextBox2.SetFocus
    End If
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 196
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

UseFORM CON 2 CAMPOS DE BUSQUEDA PARA DISTINTOS RANGOS

Publicado por Quico (91 intervenciones) el 25/02/2019 06:53:44
La verdad es que no se me ocurrió separar el 'lblMensaje' en 2 y posicionarlos así!
En mi cabeza, el diseño solo contempló la opción' de una sola.
¡Pero esta bien pensado, sí!!


Ahora tengo que averiguar porque me falla la macro del botón 'LOCALIZAR',
He probado a cambiar la forma de BUSCAR con:
LookAt:=x1Part)
LookAt:=XlWhole

Sin embargo, eliminando esta variable, he conseguido LOCALIZAR (osea, remarcar la celda) de la Columna B (escribiendo el valor en TextBox1), pero no consigo que al escribir el valor de Columna D en TextBox2, me LOCALICE el número.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub CommandButton2_Click()
'Sub Localizar()
   Dim ResultadoColB
   Dim ResultadoColD
   Dim CeldaColB
   Dim CeldaColD
 
   ResultadoColB = TextBox1
   If ResultadoColB = "" Then Exit Sub
   Set CeldaColB = Range("B:B").Find(What:=ResultadoColB)
   If Not CeldaColB Is Nothing Then
      Range("B" & CeldaColB.Row).Select
   Else
   lblMensaje_B.Caption = "¡¡No localizo esta 'Story ID' en Columna B!!"
 
      End If
 
   ResultadoColD = TextBox2
   If ResultadoColD = "" Then Exit Sub
   Set CeldaColD = Range("D:D").Find(What:=ResultadoColD)
   If Not CeldaColD Is Nothing Then
      Range("D" & CeldaColD.Row).Select
   Else
   lblMensaje_D.Caption = "¡¡No localizo esta 'Story ID' en Columna D!!"
 
      End If
 
End Sub

¿Porque funciona en la Columna B y no la D si parece estar apuntando a cada columna?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.160
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

UseFORM CON 2 CAMPOS DE BUSQUEDA PARA DISTINTOS RANGOS

Publicado por Antoni Masana (1454 intervenciones) el 25/02/2019 09:34:06
Basicamente lo que hacen los dos botones es lo mismo. La diferencia esta en como lo presentan.

Si buscas en las dos columnas a la vez debes seleccionar las dos celdas a la vez y no una y después la otra, eso no sirve.

El código de los botones queda así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Private Sub CommandButton1_Click()
    Call Buscar(1)
End Sub
 
Private Sub CommandButton2_Click()
    Call Buscar(2)
End Sub
 
Sub Buscar(Boton As Byte)
    Dim buscoColB,  buscoColD, NombreColB As String, NombreColD As String
    Dim RangoColB As String
    Dim RangoColD As String, R1 As String, R2 As String
 
    R1 = "": RangoColB = "B7:B" & ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row
    R2 = "": RangoColD = "D7:D" & ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row
 
    ' ---&--- Buscar Columna b
    If Not TextBox1.Text = Empty Then
       Set buscoColB = ActiveSheet.Range(RangoColB).Find(What:=TextBox1.Text, LookAt:=xlPart)
       If Not buscoColB Is Nothing Then
          If Boton = 1 Then
              lblMensaje_B.Caption = "Si se ha encontrado el 'Story ID' en Columna B. "
          Else
              R1 = "B" & buscoColB.Row: Range(R1).Select
              lblMensaje_B.Caption = ""
          End If
       Else
          lblMensaje_B.Caption = "No se ha encontrado el 'Story ID' en Columna B."
       End If
       TextBox1.SetFocus
    End If
 
    ' ---&--- Buscar Columna D
    If Not TextBox2.Text = Empty Then
       Set buscoColD = ActiveSheet.Range(RangoColD).Find(What:=TextBox2.Text, LookAt:=xlPart)
        If Not buscoColD Is Nothing Then
          If Boton = 1 Then
              lblMensaje_D.Caption = "Si se ha encontrado el 'Story ID' en Columna D. "
          Else
              R2 = "D" & buscoColD.Row: Range(R2).Select
              lblMensaje_D.Caption = ""
          End If
       Else
          lblMensaje_D.Caption = "No se ha encontrado el 'Story ID' en Columna D."
       End If
       TextBox2.SetFocus
    End If
    ' ---&--- Selecciona las dos celdas
    If Boton = 2 Then
       If Len(R1) > 0 And Len(R2) > 0 Then Range(R1 & "," & R2).Select
    End If
End Sub

También he cambiado el salto de objetos, es decir cuando abres se posiciona en el TextBox1, salta al TextBox2, salta al Boton 1 y salta al Boton 2 y vuelve al inicio.

Adjunto Libro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar