Excel VBA:基于comboboxselect然后总和为文本框添加值

我正在创build一个用户窗体,应该允许我从combobox中select一个选项,并且我需要select在它旁边的文本框中input一个值,因为我需要在最后执行一个计算。

我有4个框架,每个4个combobox和5个文本框(第5个是结果)。

我不确定这是否是正确的方法,因为这是我第一次使用用户窗体。

首先,我在工作簿的表格中创build了一个名为“是”和“否”的列表,并给它一个名称范围。 我认为在未来需要添加更多值而不需要修改代码的情况下会更容易。

=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,“否”值为0,然后合并帧中的所有值,并将其除以响应计数。 所以如果一个cbbox是空白的,那么txtbox也应该是空白的。

任何意见或build议都非常受欢迎。

编辑:

我为每个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 

你可以用一个所有事件处理程序调用的函数来减less你的代码,比如:

 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