我创建了一个用户表单,我想用它来计算8种不同化学物质的速率和浓度。我构建的用户窗体有3个不同的列,每列有8行。第一列是一个组合框,其中包含化学品的总浓度,第二列和第三列是标签,我希望根据我在用户表单中其他地方定义的总体浓度和数据显示特定值。我已经为第一行化学数据编写了代码:
'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行中的组合框 CCb1是第2列第1行中的标签 CRb1是第3栏第1行中的标签
我已经标准化了所有组合框和标签的名称,只根据它们所在的行来改变数字。
上面的代码工作正常,我知道我可以很好地复制它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'类型不匹配并突出显示我的IF语句的条件部分。如果需要,我可以(尝试)提供更多信息,但如果有人有想法,我会非常有兴趣听到它们。提前谢谢。
答案 0 :(得分:0)
从查看代码开始,我猜你是想从组合框中获取值 CC1 ?
如果是这种情况,请尝试控件
UserForm1.Controls("CC" & i).Value
因为您在代码中所做的是
您只需设置浓度即可获得值“CC1.Value”
如果语句将检查“CC1.Value”是否为0,而不是从组合框 CC1 中获取值并将其与0进行比较