在其他工作表上输入时更改从一个工作表派生的Userform Label

时间:2018-04-06 13:09:52

标签: excel-vba dynamic userform labels vba

我有一张举重举行的工作表。去年我创建了一个标签,可以提供当前升降机的信息以及接下来的人员。

left side - Display, right side - input tab

当我输入" x"在数据选项卡的R,S,T或W列中,它会更改BenchGenerator选项卡中的信息,如下所示:

Updated Display tab

我想要做的是让用户表单显示在不同的屏幕上运行,以便人们可以看到这些信息。我去年通过扩展excel和使用两个视图窗口完成了这一点 - 在第二个屏幕上显示并在计算机上运行会议。这很好,但看起来非常笨重。使用浮动用户表单选项卡,它看起来很棒。我是新手,但得到了表格浮动:

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

最初填充标签:

Userform Display

使用此代码:

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

当我输入" x"时,它目前所做的是更新字幕。在数据选项卡中。

正如我所提到的,这是我第一次尝试进入用户形态,并通过大量代码试图解决这个问题,但它不会是我的最后一步,因为有很多东西要用它们完成。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你非常接近让这个工作。问题是每次发生变化时都要调用新表单。

将您的表单声明为创建(Sub)它的Show之外的对象。

然后,您可以访问它以更新具有相同范围的其他Sub的标签。

例如,创建一个UpdateForm子,并从Worksheet_Change事件中调用它。

试试这个,将以下代码放在一个新模块中:

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

如果您使用Worksheet_Change更新表单,则表示您希望验证表单是否存在,或者只是在事件中跳过任何错误。

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

答案 1 :(得分:0)

不确定是否有更简单的方法,但我制作了一个连接例程来批量处理我的标签设置和更新,以快速创建/复制/粘贴所有代码。

Concatenator

万一有人不知道该怎么做