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

时间:2016-06-07 23:14:45

标签: excel vba excel-vba

我创建了一个用户表单,我想用它来计算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语句的条件部分。如果需要,我可以(尝试)提供更多信息,但如果有人有想法,我会非常有兴趣听到它们。提前谢谢。

1 个答案:

答案 0 :(得分:0)

从查看代码开始,我猜你是想从组合框中获取值 CC1

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

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

因为您在代码中所做的是

您只需设置浓度即可获得值“CC1.Value”

如果语句将检查“CC1.Value”是否为0,而不是从组合框 CC1 中获取值并将其与0进行比较