Quiero que desde mi formulario pueda buscar los datos en la Hoja indicada donde se encuentran, sin estar posicionado en ella.

Desde mi hoja1 al abrir el formulario ingreso nombre del cliente en mi TXT1 y me arroja el código que le pertenece en mi TXT2, pero cuando me posiciono en otra hoja y abro mi formulario al llamar los datos me da error.

¿Prodrian ayudarme?... De antemano agradezco tu ayuda!

Private Sub CommandButton1_Click()
Dim Datos As String

Datos = TXT1.Value

Cells.Find(What:=TXT1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate

TXT2.Value = ActiveCell.Offset(0, 3).Value

End Sub

2 respuestas

Respuesta
2

El código se ejecuta adoptando los datos de la hoja activa, si no le especificas donde están tus datos siempre te marcará error.

Intenta así:

Private Sub CommandButton1_Click()
Dim Datos As String
Set h = Sheets("Hoja1")
Datos = TXT1.Value
h.Cells.Find(What:=TXT1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate
TXT2.Value = ActiveCell.Offset(0, 3).Value
End Sub

Hola! gracias por tu interés en ayudarme.....Lo valoro mucho!!

Coloque la macro exactamente como me dijiste y me arrojo mensaje:

se ha producido el error '1004' en tiempo de ejecución

error en el método Activare de la clase Range

Private Sub CommandButton1_Click()
Dim Datos As String
Set h = Sheets("CLIENTES")
Datos = TXT1.Value
h.Cells.Find(What:=TXT1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate
TXT2.Value = ActiveCell.Offset(0, 3).Value
End Sub

De esta manera no me  funciona: .....Cambie el nombre de " hoja3" por el de "CLIENTES" que es donde están los datos y únicamente me funciona posicionado allí. ...Agradezco tu apoyo!!

¿Exactamente qué quieres hacer?

Lo que quiero es que la macro a través del formulario VBA me busque los datos sin  llevarme o mostrarme la hoja Clientes donde están ubicados......Gracias!

Eso queda claro, ¿pero después de encontrar ese valor que necesitas?
Por ejemplo esta línea:

TXT2.Value = ActiveCell.Offset(0, 3).Value

Es lo único que necesito;  encontrar ese valor que varia de acuerdo al cliente, pero quiero trabajar desde la hoja menú con el formulario sin que me muestre la ubicación de la celda.

Gracias por tu tiempo!!

A lo que me refería es que necesitas con esa línea pero bueno supongo que necesitas el valor de la misma línea.

Private Sub CommandButton1_Click()
Dim Datos As String
Set h = Sheets("CLIENTES")
Set a = h.Cells.Find(What:=TXT1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate
TXT2.Value = h.Cells(a.Row, "C")
End Sub

Estamos suponiendo que el valor que quieres de regreso esta en la columna C

Que pena amigo tal vez no me he hecho entender:

Al ingresar dato en mi TXT1  busque el dato que coincide en  la Hoja "CLIENTES" en el Range("A)  y me traiga el valor que se encuentra en esa misma fila a dos columnas a mi TXT2.

*Te reitero de nuevo los agradecimientos!!  en realidad no se mucho de esto pero me esfuerzo por aprender

Entonces esa te sirve, busca el dato que quieres y te regresa su valor respectivo de la columna C (dos columnas)

Experimente tal como me dejaste la macro y me da el error 1004 en tiempo de ejecución

dice que no se puede obtener la propiedad Activare de la clase Range

Que puedo hacer amigo?

Es por tu línea de búsqueda, aunque no se realmente todas las propiedades que quieres buscar pero intenta así:

Private Sub CommandButton1_Click()
Set h = Sheets("CLIENTES")
Set a = h.Cells.Find(TXT1.Value, LookAt:=xlPart)
TXT2.Value = h.Cells(a.Row, "C")
End Sub

Pero te recomiendo más así:

Private Sub CommandButton1_Click()
Set h = Sheets("CLIENTES")
Set a = h.Cells.Find(TXT1.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
TXT2.Value = h.Cells(a.Row, "C")
End Sub

Con búsqueda exacta no tendrás problemas de búsqueda.

falta un end if perdón

Private Sub CommandButton1_Click()
Set h = Sheets("CLIENTES")
Set a = h.Cells.Find(TXT1.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
TXT2.Value = h.Cells(a.Row, "C")
End if
End Sub
Respuesta
2

Creo que la consulta ya está resuelta.

Solo quería hacer incapié en un error común cuando utilizan esta instrucción:

Cells.Find(What:=TXT1, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, searchorder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, _
SearchFormat:=False).Activate

Tal como explico en el video 11 de mi canal (y algo más en el video 25) con esa instrucción están dando por sentado que el dato se encontrará... y luego se activará.

Pero y si no lo encuentra?? saltará un error.

Quizás no sea tu caso... pero recomiendo el uso de una variable que pueda ser evaluada si la búsqueda fue exitosa o no.

Set busco = Hoja.Rango.Find(dato, LookIn:=xlValues, lookat:=xlWhole)
  If Not busco Is Nothing Then
      'instrucciones por si encuentra el dato
  Else
      'instrucciones por si no lo encuentra
  End If

Reemplazar Hoja, Rango y dato por lo que correspondan  a cada caso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas