在不同的工作表上输入时更改从一个工作表派生的用户表单标签

Changing Userform Label derived from one worksheet when inputting on a different worksheet

我有一份 运行 举重比赛的工作表。去年我创建了一个选项卡,可以提供有关当前举重运动员和下一位举重运动员的信息。

left side - Display, right side - input tab

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

Updated Display tab

我想做的是在不同的屏幕上 运行 显示用户表单,以便人们可以看到此信息。去年,我通过扩大 excel 并使用双视图 windows - 在第二个屏幕上显示并在计算机上 运行 会议来实现这一点。还可以,但看起来很笨重。使用浮动用户窗体选项卡,它看起来很棒。我是新手,但表格浮动了:

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" 时,它目前不会更新标题。

正如我所提到的,这是我第一次涉足用户表单并浏览堆积如山的代码试图解决这个问题,这不会是我的最后一次,因为有很多事情要做。

在此先感谢您的帮助!

你已经非常接近让它工作了。问题是每次发生更改时您都会调用新表单。

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

然后您可以访问它以更新来自具有相同范围的另一个 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

不确定是否有更简单的方法,但我做了一个连接例程来批量处理我的标签设置和更新以快速 create/copy/paste 所有代码。

以防万一有人不知道该怎么做