在不同的工作表上输入时更改从一个工作表派生的用户表单标签
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 所有代码。
以防万一有人不知道该怎么做
我有一份 运行 举重比赛的工作表。去年我创建了一个选项卡,可以提供有关当前举重运动员和下一位举重运动员的信息。
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 所有代码。
以防万一有人不知道该怎么做