Excel VBA函数使用“FOR”循环来计算多列数据并将其显示在用户窗体中

我创build了一个用户表单,我想用它来计算8种不同化学物质的速率和浓度。 我build立的用户表单有3列,每列有8行。 第一栏是包含化学品总体浓度的combobox,第二栏和第三栏是我想根据用户表单中其他位置定义的整体浓度和数据显示特定值的标签。 我已经编写了第一行化学数据的代码,如下所示:

'chemical calculator If CC1.Value = "" Or CC1.Value = 0 Then CRb1.Visible = False CCb1.Visible = False Else CRb1.Visible = True CCb1.Visible = True CRb1.Caption = Round((cClean * 0.042 * CC1.Value), 2) CCb1.Caption = Round((CRb1.Caption / ((cClean - PSrate) * 0.042)), 2) End If 

CC1是第1行第1行中的comboboxCCb1是第2行第1行中的标签CRb1是第3行第1行中的标签

我已经标准化了所有combobox和标签的名称,只是根据它们所处的行数来改变数字。

上面的代码工作正常,我知道我可以很好地复制它8次,并更改数字,但为了学习新的东西,并保持易于阅读的兴趣我想找出如何使用“FOR” (?)循环,但我相当新的编程,可能会丢失一些东西。 我已经尝试了以下内容:

 Dim i As Integer For i = 1 To 8 Dim Conc As String Conc = "CC" & i & ".Value" Dim bConcVis As String bConcVis = "CCb" & i & ".Visible" Dim bConcCap As String bConcCap = "CCb" & i & ".Caption" Dim bRateVis As String bRateVis = "CRb" & i & ".Visible" Dim bRateCap As String bRateCap = "CRb" & i & ".Caption" If Conc = "" Or Conc = 0 Then bRateVis = False bConcVis = False Else bRateVis = True bConcVis = True bRateCap = Round((cClean * 0.042 * CC1.Value), 2) bConcCap = Round((bRateCap / ((cClean - PSrate) * 0.042)), 2) End If Next i 

这会导致运行时错误“13”types不匹配,并突出显示我的IF语句的条件部分。 我可以(尝试)提供更多的信息,如果需要的话,但如果有人有想法,我会很感兴趣,听到他们。 提前致谢。

从看你的代码,我猜你正试图从combobox中获取一个值?

如果是这种情况,请尝试控制

 UserForm1.Controls("CC" & i).Value 

因为你在代码中做的是这样的

你只是设置浓度来获得价值“CC1.Value”

如果语句将检查“CC1.Value”= 0,而不是抓取comboboxCC1的值并将其与0比较