我正在创建一个用户表单,允许我从组合框中选择一个选项,我需要选择一个值旁边的文本框,因为我需要在最后执行计算。
我有4个框架,每个框架有4个组合框和5个文本框(第5个用于结果)。
我不确定这是否是正确的方法,因为这是我第一次使用用户表单。
首先,我创建了一个列表"是"和"不"在工作簿中的工作表中,并给它一个名称范围。我认为如果我需要在将来添加更多值而不必修改代码会更容易。
=OFFSET(Lists!$A$2, 0, 0, COUNTA(Lists!$A:$A),1)
这是我到目前为止的一段代码。
Private Sub UserForm_Initialize()
Dim rngResponse As Range
Dim ws As Worksheet
Set ws = Worksheets("Lists")
For Each rngResponse In ws.Range("Response")
Me.cbResponse1.AddItem rngResponse.Value
Me.cbResponse2.AddItem rngResponse.Value
Me.cbResponse3.AddItem rngResponse.Value
Me.cbResponse4.AddItem rngResponse.Value
Me.cbResponse5.AddItem rngResponse.Value
Me.cbResponse6.AddItem rngResponse.Value
Me.cbResponse7.AddItem rngResponse.Value
Me.cbResponse8.AddItem rngResponse.Value
Me.cbResponse9.AddItem rngResponse.Value
Me.cbResponse10.AddItem rngResponse.Value
Me.cbResponse11.AddItem rngResponse.Value
Me.cbResponse12.AddItem rngResponse.Value
Me.cbResponse13.AddItem rngResponse.Value
Me.cbResponse14.AddItem rngResponse.Value
Me.cbResponse15.AddItem rngResponse.Value
Me.cbResponse16.AddItem rngResponse.Value
Next rngResponse
End Sub
每个文本框的命名如下。
txtResponse1
txtResponse2
txtResponse3
txtResponse4
直到txtResponse16
然后我想在每个框架中显示结果的文本框
txtResult1
txtResult2
txtResult3
txtResult4
我需要"是"值为1和" No"值为0,然后对帧中的所有值进行求和,并将它们除以响应计数。因此,如果cbbox为空,则txtbox也应为空白。
非常欢迎任何意见或建议。
编辑:
我为每个comboxbox添加了其中一个并且它可以工作,但现在我有16个潜艇。有没有办法缩短这个?
Private Sub cbResponse1_Change()
If Me.cbResponse1.Value = "" Then
Me.txtResponse1.Value = ""
End If
If Me.cbResponse1.Value = "Yes" Then
Me.txtResponse1.Value = 1
End If
If Me.cbResponse1.Value = "No" Then
Me.txtResponse1.Value = 0
End If
End Sub
答案 0 :(得分:1)
你可以通过一个所有事件处理程序调用的函数来减少你的代码,如下所示:
Private Sub cbResponse1_Change()
Call cbResponsex_Change(Me.cbResponse1, Me.txtResponse1)
End Sub
Private Sub cbResponse2_Change()
Call cbResponsex_Change(Me.cbResponse2, Me.txtResponse2)
End Sub
Private Sub cbResponsex_Change(cbResponse As Combobox, txtResponse As TextBox)
If cbResponse.Value = "" Then
txtResponse.Value = ""
End If
If cbResponse.Value = "Yes" Then
txtResponse.Value = 1
End If
If cbResponse.Value = "No" Then
txtResponse.Value = 0
End If
End Sub