Pasar valores textbox de form1 (libropadre.xlsm) a textbox form1 (librohijo.xlsm)

Tengo un formulario en el libropadre.xlsm el cual a través de un filtro me muestra valores en un listbox el cual paso a textbox's. Mi idea es pasar esos valores del textbox a otro formulario pero de otro librohijo.xlsm por medio de un botón.

1 respuesta

Respuesta
1

Como siempre hay muchas formas de hacerlo, una forma elegante es guardar el texto en una variable y pasarla a una función en el otro libro que asigne el valor al otro cuadro de texto, pero eso es otro cuento, no te enredes. Acá te dejo igual la mas rápida y sencilla:

Es fundamental de donde tienes el botón, dependiendo de eso debes cambiar las referencias, acá asumimos que el botón esta en libropadre.xlsm, y el cuadro de texto esta en la hoja uno del librohijo.xlsm, si esta en otra hoja cambia el nombre de Sheets("Nombre_hoja") o el indice.

TextBoxPadre --------> es el textBox en el libropadre.xlsm

TextBoxHijo -----> es el textBox en el librohijo.xlsm

     Private Sub CommandButton1_Click()

              Workbooks("librohijo.xlsm").Sheets("Hoja1").TextBoxHijo.Text = TextBoxPadre.Text

     End Sub

Saludos (Recuerda siempre hacer las cosas de la manera mas sencilla).

Hola. Vi tu respuesta y sirve a la perfección siempre y cuando trabaje con una hoja en el librohijo.xlsm. Lo que quiero es pasarlo entre formularios vba. Es decir al presionar el botón del formulario padre envíe esos datos del textbox al formulario hijo

Bien vamos a hacerlo de manera elegante com te mencione.

Te explico primero:

Vamos a guardar el texto en una variable el el libropadre.xlsm (no es necesario pero es mas ordenado), esto lo declaras en el click del botón.

Dim texto       ' declaramos la variable

texto = TextBoxPadre.Text     'le asignamos el valor

Luego debemos tener un procedimiento en un modulo de librohijo.xlsm (insisto para se organizados), que acepte un parámetro de tipo texto. Acá asignaremos al TextBoxHijo el valor que le estamos pasando.

Sub guardarTexto(tex as String)

         UserForm1!TextBoxHijo.Text = tex   'acá con el nombre de tu formulario

End Sub

Por ultimo regresamos al click del botón en libropadre.xlsm y llamamos al procedimiento en librohijo.xlsm pasandole la variable texto como argumento. (OJO acá hay un detalle importante, cuando pasar parámetros a las funciones con este método espera una respuesta así que deben asignarlo a una variable, la cual te servirá de ser necesario para validar si fue o no correcto.

Dim resultado

resultado = Application.Run("librohijo.xlsm!guardarTexto", texto)

En fin tendremos lo siguiente:

En libropadre.xlsm------->UserForm1 encontramos:

     Private Sub Boton_Click()

                Dim texto, resultado
                texto = TextBoxPadre.Text

                resultado = Application.Run("librohijo.xlsm!guardarTexto", texto)

     End Sub

En librohijo.xlsm--------->modulo encontramos:

     Sub guardarTexto(tex as String)

                UserForm1!TextBoxHijo.Text = tex   'aca con el nombre de tu formulario

     End Sub

Espero haber sido claro, perdón por algún error, pero escribo directo acá, para darte una respuesta rápida y puedas resolver, me di cuenta que en otra respuesta escribí Form en un sitio y Formulario en otro.

Me avisas cualquier cosa.

Hola. Ya pude adaptarlo a mi sistema tal cual lo requeria. Muchas gracias. Solo le añadi al modulo "UserForm1.show" y quedo ok. 

Lo olvidaba. Este código es para un textbox. Y si son más de 1 textbox.. Es decir 3 por pasar al otro form

Perfecto, si siempre tratare solo de explicar y dar algunos datos, lo importante es que todos aprendamos siempre, de nada vale, escribir la solucion para que solo copien y peguen.

Me alegra que te sirvio.

Te dejo una forma rápida (si son pocos):

  1. Si son pocos pasas cada valor en una linea con la misma sentencia, agregando otro parámetro a la función guardar(), para identificar el textBox, y creamos un grupo de condicionales If por ejemplo, que permita seleccionar cual textBox se va a actualizar. (puedes usar SELECT CASE, es cuestion de gustos).

Por ejemplo:

      Sub guardar(tex As String, nombreTextBox As String) '------Puedes usar un ID también

              If (nombreTextBox = "TextBoxHijo1") Then

                         UserForm1!TextBoxHijo1.Text = tex

             ElseIf (nombreTextBox = "TextBoxHijo2") Then                                                      

                         UserForm1!TextBoxHijo2.Text = tex

             ElseIf (nombreTextBox = "TextBoxHijo3") Then

                        UserForm1!TextBoxHijo3.Text = tex

             End If

       End Sub

2. En el botón llamas la función tres veces pasandole en cada caso los parámetros correspondientes, en este caso vamos a obviar la variable y pasamos directamente el texto.

      Private Sub Boton_Click()

                     Dim  resultado

                     resultado = Application.Run("librohijo.xlsm!guardarTexto", TextBoxPadre1.Text,                  "TextBoxHijo1")

                     resultado = Application.Run("librohijo.xlsm!guardarTexto", TextBoxPadre2.Text, "TextBoxHijo2")

                     resultado = Application.Run("librohijo.xlsm!guardarTexto", TextBoxPadre3.Text, "TextBoxHijo3")

         End Sub

Repito esto en el caso que sean pocos, si fuesen muchos, usamos un id en vez del nombre del textBox, y guardamos en un array los textos luego usamos ciclos para copiar todo de forma automática, de ser así vemos ese caso.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas