Excel VBA - Problemas con formulario de búsqueda de valores en TextBox2 y 3 ingresando en TextBox1 un dato

Agradezco mucho su foro que nos permite resolver nuestras dudas, este es mi primer macro que he hecho siguiendo varios ejemplos y modificándolos a mis necesidades pero tengo un problema.

Tengo un TextBox1 que si ingreso el número de su Código me busque y coloque en un TextBox2 su Apellidos y Nombres; y en TextBox3 su Centro de Costo, esos datos están en una hoja llamada "DataRRHH" y luego al darle click en un CommandButton1 llamado Grabar esa información me grabe en otra hoja ya hecha que la llamé "MatrizMod".
Ambas hojas están en el mismo archivo, pero el botón conque ejecuto el formulario está en "MatrizMod".

La data es ási.

Código Apellidos y Nombres Centro de Costo
47659483 Acevedo Jayro                PRODUCCION CAMPANA
74046340 Aguilar Gian Pierre ALMACEN DE PRODUCTOS TERMINADO

Usé este código:

Private Sub TextBox1_AfterUpdate()

Set rango = Sheets("DataRRHH").Range("A:A").Find(What:=TextBox1, _
LookAt:=xlWhole, LookIn:=xlValues)

If rango Is Nothing Then
MsgBox "El dato no fue encontrado", vbOKOnly + vbInformation, "AVISO"
TextBox1 = "": TextBox1.SetFocus
Exit Sub
Else
TextBox6 = Range("B" & rango.Row)
TextBox2 = Range("C" & rango.Row)
TextBox3 = Range("D" & rango.Row)
TextBox7 = Range("W" & rango.Row)

End If

End Sub

El problema está en que sólo funciona si lo ejecuto en el libro "DataRRHH", si lo ejecuto desde la hoja "MatrizMod" no funciona, y como el botón de ejecución del formulario está en ese último no se me hace posible ejecutarlo.
He buscado ejemplos en Internet pero solo he encontrado de ComboBox a TextBox y no entre TextBox.
Quisiera que funcione mi formulario pero desde la hoja que necesito y no desde la hojas "DataRRHH" donde están los datos :(
Agradeceré su ayuda :D

Respuesta
2

Cambia la parte del código de los textbox por éste.

TextBox6 = Sheets("DataRRHH").Range("B" & rango.Row)
TextBox2 = Sheets("DataRRHH").Range("C" & rango.Row)
TextBox3 = Sheets("DataRRHH").Range("D" & rango.Row)
TextBox7 = Sheets("DataRRHH").Range("W" & rango.Row)

Pruébalo y comentas si te funcionó. Salu-dos

¡Gracias! 
Me ha funcionado.

Una pregunta porque también quiero entender el código para hacer mis propios arreglos, ¿por qué agregar Sheets cambia todo el contexto si ya lo había especificado en la variable "rango"? 

TextBox6 = Range("B" & rango.Row)

TextBox6 = Sheets("DataRRHH").Range("B" & rango.Row)

En tu código tienes esto:

Set Rango = Sheets("DataRRHH").Range("A:A")

Acá solo se está estableciendo la variable Rango a una referencia de objeto, en este caso la hoja (“DataRRHH”)-, como predeterminado los rangos de la columna A.

Luego sigue:

Find(What:=TextBox1

Donde se está buscando la información contenida en el textbox1.

Luego:

LookAt:=xlWhole:

Esto equivaldría la coincidencia del contenido de la celda al dato buscado.

Y por último:

LookIn:=xlValues

Busca dentro de las celdas el valor del textbox1.

Ya en la instrucción de tu código:

TextBox6 = Range("B" & Rango.Row)

Sola se está trayendo el dato de la celda B de la hoja activa al textbox6, según el dato que se ingreso en el textbox1, guardando ese dato en la variable Rango.

Por ejemplo si en el textbox1 ingresas el numero 15, al salir de este, ese dato se queda guardado en la variable Rango, mas NO el nombre de la hoja, por eso se antepone antes de la palabra Range, Sheets(“DataRRHH”), para decirle al código que se trata de esa hoja y se pueda usar sin problemas.

Nota:

Puedes declarar la variable Rango como Object o Range

Espero que mi breve explicación te sirva de ayuda. Salu-dos

Es más que breve tu explicación. Es enormemente detallada y he entendido a la perfección eso y más. Seguro alguien más que lo lea y comprenda se sentirá agradecido.

Espero terminar mi proyecto pronto, si tuviera alguna pregunta nueva estaré agradecido ver tu amena respuesta. ¡Gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas