Como puedo usar el valor de una variable en dos formularios distintos en Excel VB

Estoy desarrollando un programilla en donde tengo 2 formularios distintos Form1 y Form2. En el Form2 tengo un Textbox el cuál llame "Responsable_del_Proyecto" y que muestra el área responsable del proyecto (esta descripción es variable por cada proyecto). En mi Form1 tengo un botón y quiero que al hacer clic en él, el valor de la descripción del proyecto se copie en una hoja de Excel.

He probado declarando una variable pública desde un módulo independiente, pero al momento de correr el programa me arroja un error que dice "El procedimiento externo no es válido".

El código que tengo hasta el momento es este:

**Módulo de variables públicas**

Public Responsable_Proy As String

Responsable_Proy = UserForm2.Responsable_del_Proyecto

**Form1**

Private Sub CommandButton1_Click()
MsgBox ("¿Desea guardar los registros?"), vbYesNo + vbExclamation, ("Posiciones recomendadas")
If vbYes Then

Worksheets("Recomendación").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = variables_Públicas.Responsable_Proy

End If

___________________________

No sé si es la mejor forma de hacer lo que deseo o si alguien sabe cómo lo puedo realizar.

1 Respuesta

Respuesta
1

Te muestro una forma de hacerlo.

Supongo que en el form1 tienes un botón que llama al form2.

También supongo que después de llenar el form2, tienes un botón de Aceptar, para salir del form2 y regresar al form1.

Si lo anterior es correcto, prueba lo siguiente:

En el form1 pon el siguiente código

Public Responsable_Proy
'
Private Sub CommandButton1_Click()
    MsgBox "¿Desea guardar los registros?", vbYesNo + vbExclamation, "Posiciones recomendadas"
    If vbYes Then
        Worksheets("Recomendación").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = Responsable_Proy
    End If
End Sub

Observa que al principio de todo el código en el área (General) (Declaraciones) estoy declarando como pública la variable Responsable_Proy.


En el form2 cuando presiones el botón para regresar al form1, puedes poner algo así:

Private Sub CommandButton1_Click()
'Regresar al form1
    UserForm1.Responsable_Proy = Responsable_del_Proyecto.Value
    Unload Me
End Sub

Nota: No es necesario un módulo de variables públicas.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola Dante Amor , gracias por tu respuesta, creo que no me expliqué bien. Te cuento un poco mas a detalle: hoy tengo 2 formularios independientes, el form1 y el form2.

En el form 2 se capturan algunos datos iniciales de los proyectos del área como clave, responsable, descripción, etc.  El textbox de "responsable" lo renombré como "Responsable_del_Proyecto". Al terminar la captura, los valores se copian en una hoja de Excel.

Ahora, el form1 se llama mediante un botón que esta fuera del form2, y aquí  se desea actualizar ciertos datos del proyecto y pegarlos en una hoja distinta de Excel (con la finalidad de hacer la comparación de la información registrada al inicio y la que se actualizó), pero específicamente el campo de "Responsable_del_Proyecto" no cambia, a mi se me había ocurrido guardar el valor de este textbox en una variable desde su captura (en el form1) y en el form2 sólo hacer referencia a esta variable para que la copie a la nueva hoja de excel.

Te muestro parte del código de ambos forms

**Form2** (aqui se hace la captura inicial del proyecto y se guardan en una hoja llamada "BD")

Private Sub CommandButton2_Click()
'Imputa todos los valores en la base

Dim j As Integer
Dim Interno As String
Dim Externo As String

If Not validar(Me) = "" Then MsgBox "Los siguientes espacios no pueden estar vacios:" & validar(Me): Exit Sub

For j = 1 To No

Sheets("BD").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Clave_del_Proyecto.Value
Sheets("BD").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = Nombre_del_Proyecto.Value
Sheets("BD").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = Descripcion.Value
Sheets("BD").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = Responsable_del_Proyecto.Value (este dato es el que quiero que me copie tal cual a la nueva hoja de excel usando el form1)

_______________________________________________________________

**Form1** (aquí esta el código para actualizar la información inicial)

Private Sub CommandButton1_Click()

MsgBox ("¿Desea guardar los registros?"), vbYesNo + vbExclamation, ("Posiciones recomendadas")

'Captura de posiciones recomendadas en la hoja de Recomendación.
If vbYes Then

Worksheets("Recomendación").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = ComboBox1.Value
Worksheets("Recomendación").Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Value = TextBox1.Value
Worksheets("Recomendación").Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Value = TextBox2.Value
Worksheets("Recomendación").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = variables_Públicas.Responsable_Proy (aquí había citado la variable que definí en el módulo de variables públicas)

Espero haberme dado a entender

De antemano, gracias por el apoyo.

Sigo sin entender.

¿Cuál es la secuencia de pasos?

Explica qué quieres hacer paso a paso:

1. Cuál form quieres abrir primero.

2. Que vas a capturar

3. Qué botón vas a presionar

4. Etc

El proceso empieza con el form2 y para mostrarlo se usa el botón "Nuevo Proyecto"

Aquí se captura información inicial del proyecto (personas que participan, responsables, clave de proyecto, etc) y al hacer clic en el botón "Guardar" los valores del form2 se registran en una hoja de excel.

Después de algún tiempo, los participantes del proyecto cambian (pudiendo ser menos o mas) es aquí cuando se usa el frm1 y se habilita con el botón "Seguimiento" (este botón esta fuera del form1) aquí se busca el proyecto con un Combo y al elegir el proyecto a modificar, se captura el número de personas final que están en dicho proyecto y al hacer clic en el botón "Actualizar" la nueva información se copia en una hoja diferente a la que se usa en el form anterior.  como el valor del campo de "responsable del proyecto"  no cambia, este se deberá copiar tal cual a la nueva hoja.

Si siguen existiendo dudas, por favor avisame.

Gracias

Haber si entendí.

En el form2 capturas al responsable.

Entonces en tu botón Guardar del form2 tienes que llenar la variable pública

Por ejemplo:

Private Sub CommandButton1_Click()
'Estoy en el form2 y guardar los datos en la hoja
   'Aquí va el código para poner los datos en la hoja
   'Aquí lleno la variable
      Módulo1.Responsable_Proy = Responsable_del_Proyecto.value
end sub

En el módulo1 debes tener algo así:

Public Responsable_Proy

En form1 puedes utilizar el dato de la variable Responsable_Proy, por ejemplo:

Worksheets("Recomendación"). Cells(Rows. Count, 4).End(xlUp).Offset(1, 0).Value = módulo1. Responsable_Proy

Cambia módulo1 por el nombre de tu módulo


Usé el código que me mandaste, sin embrago en la línea donde cito la variable me manda un mensaje que indica "se requiere un objeto" lo capturé de esta manera:

El módulo no nombré Variables_Públicas y ahí deifiní la variable como: "Public Responsable_Proy"

en mi Formulario1 la línea de código es: 

Worksheets("Recomendación").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0).Value = variables_Públicas.Responsable_Proy.Value (aquí me manda el mensaje de error)

Te comento que intenté buscar otra forma de solucionarlo y parece que si me resultó, aplique la formula de VLookup para que me devolviera el valor original de la hoja de excel.

Muchas gracias por el apoyo y la paciencia. Saludos

No te compliques cambiando los nombres a los módulos.

Realiza al prueba con los datos que te envié.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas