Cambiar la etiqueta de formulario de usuario derivada de una hoja de t

Cambiar la etiqueta de formulario de usuario derivada de una hoja de trabajo cuando se ingresa en una hoja de trabajo diferente

Tengo una hoja de trabajo que ejecuta una competencia de levantamiento de pesas. El año pasado había creado una pestaña que daría información sobre el levantador actual y sobre quién levantaría después.

lado izquierdo - Pantalla, lado derecho - pestaña de entrada

Cuando ingreso una "x" en las columnas R, S, T o W en la pestaña de datos, cambia la información en la pestaña BenchGenerator, así:

Pestaña de visualización actualizada

Lo que quiero hacer es hacer que una pantalla de usuario se ejecute en una pantalla diferente para que las personas puedan ver esta información. Logré esto el año pasado ampliando Excel y usando dos ventanas de vista: mostrar en la segunda pantalla y ejecutar la reunión en la computadora. Estaba bien, pero se veía muy torpe. Con una pestaña de formulario de usuario flotante, se vería fantástico. Soy nuevo en esto, pero tengo el formulario flotante:

Private Sub Worksheet_Change(ByVal Target As Range)
UserForm1.Show (vbModeless)
End Sub

Y obtuve las etiquetas para completar inicialmente:

Pantalla de formulario de usuario

Usando este código:

Private Sub UserForm_Activate()
UserForm1.Label1.Caption = Sheets("BenchGenerator").Range("c4").Value
UserForm1.Label2.Caption = Sheets("BenchGenerator").Range("c5").Value
UserForm1.Label3.Caption = Sheets("BenchGenerator").Range("c6").Value
UserForm1.Label4.Caption = Sheets("BenchGenerator").Range("d3").Value
UserForm1.Label5.Caption = Sheets("BenchGenerator").Range("d4").Value
UserForm1.Label6.Caption = Sheets("BenchGenerator").Range("d5").Value
UserForm1.Label7.Caption = Sheets("BenchGenerator").Range("d6").Value
End Sub

Lo que no hace actualmente es actualizar los subtítulos cuando ingreso la "x" en la pestaña de datos.

Como mencioné, esta es mi primera incursión en los formularios de usuario y mirar montañas de código tratando de resolver esto, no será la última, ya que hay mucho que lograr con ellos.

¡Gracias de antemano por cualquier ayuda!

Mostrar la mejor respuesta

Estás muy cerca de hacer que esto funcione. El problema es que estás llamando a un nuevo formulario cada vez que ocurre un cambio.

Declare su formulario como un objeto fuera del Sub que lo crea (Show).

Luego puede acceder a él para actualizar las etiquetas desde otro Sub que tenga el mismo alcance.

Cree un sub UpdateForm por ejemplo y llámelo desde su evento Worksheet_Change.

Pruebe esto, coloque el siguiente código en un módulo nuevo:

Dim myForm As Object

Sub launchForm()
    Set myForm = UserForm1
    myForm.Show (vbModeless)
End Sub

Sub updateForm()
    Dim wks As Worksheet
    Set wks = Sheets("BenchGenerator")

    'Update label values here
    myForm.Label1.Caption = wks.Range("C4").Value
    myForm.Label2.Caption = wks.Range("C5").Value
    myForm.Label3.Caption = wks.Range("C6").Value
    myForm.Label4.Caption = wks.Range("D3").Value
    myForm.Label5.Caption = wks.Range("D4").Value
    myForm.Label6.Caption = wks.Range("D5").Value
    myForm.Label7.Caption = wks.Range("D6").Value
End Sub

Si usa Worksheet_Change para actualizar el formulario, querrá verificar que el formulario existe o simplemente omitir cualquier error en el evento si no es así.

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    updateForm
End Sub

Guardé un archivo de prueba y lo subí aquí para que puedas verlo funcionar. Está disponible por 30 días.

Estoy tan cerca, así que creé un módulo y le agregué ese código, haciendo clic en Ejecutar: Ejecutar Sub/UserForm: launchForm, aparece el formulario. Luego, cuando "x" un valor en la hoja de datos y presiono Ejecutar: Ejecutar Sub/UserForm: updateForm, ¡las etiquetas cambian PERFECTAMENTE! Creé una forma en mi hoja de datos y le asigné la macro launchForm. ¿Qué debo hacer para activar el evento de formulario de actualización cuando ingreso una "x" en una de las columnas de esa hoja? :)

¡ESTÁ BIEN! Se agregó el código On Error Resume Next updateForm a la hoja de datos y BAM, ¡hermoso!

¡Muchas gracias por publicar el archivo de prueba, que valió su peso en oro y fue la guinda del pastel!

Me alegro de que haya ayudado. Podría hacer algo similar para una competencia de derby de madera de pino que se realizará la próxima semana. Salud

La pantalla ¡Aquí está! Ahora estoy tratando de averiguar cómo cambiar el color de fuente del grupo de etiquetas en la sección "Banco" si los valores son negativos...

Wow, has hecho un gran progreso hoy. No creo que puedas cambiar el color de todo el grupo en una sola línea. Para cambiar una etiqueta individual, intente: myForm.Label7.ForeColor = vbRed Dependiendo de cómo "agrupa" las etiquetas, puede recorrer el grupo y cambiar el color. Tendría que saber más sobre lo que quieres decir con grupo. FYI: sería mejor publicar nuevas preguntas en lugar de transformar esta.

(stackoverflow.com/questions/49700768/…) Lo hice, también quería compartir los frutos de su buena ayuda :)

No estoy seguro de si hay una manera más fácil de hacerlo, pero hice una rutina de concatenación para procesar por lotes la configuración de mi etiqueta y las actualizaciones para crear/copiar/pegar rápidamente todo el código.

Concatenador

En caso de que alguien no supiera cómo hacer esto