VBA未在工作表上显示任何结果

时间:2014-11-24 16:15:02

标签: vba

为什么运行代码时工作表中没有结果。我的代码有问题吗?有人可以验证。这是我的代码:

Private Sub CommandButton1_Click()
Dim Globalstrahlung, Koll_ein_o, Koll_aus_o, Aussentemp, MIDsolar As Double
Dim a1, a2, b1, b2, c1, c2, d1, d2, e1, e2, f1, f2, g1, g2, x As Double
Dim cpTyf, RohTyf As Double
Dim Psolar, Puse_coll, Coll_eff As Double
Dim iCntr As Long

For iCntr = 3 To 8640

    Globalstrahlung = Range("B" & iCntr)
    Koll_ein_o = Range("C" & iCntr)
    Koll_aus_o = Range("D" & iCntr)
    Aussentemp = Range("E" & iCntr)
    MIDsolar = Range("F" & iCntr)

    x = (Koll_ein_o + Koll_aus_o) / 2

    x = Range("AW" & iCntr)

    'Function cp(t) Tyfocor 35%
    a1 = 3.5199
    b1 = 0.0042
    c1 = -0.00002
    d1 = 0.0000009
    e1 = -0.00000002
    f1 = 0.0000000001
    g1 = -0.0000000000005

    cpTyf = a1 + (b1 * x) + (c1 * (x ^ 2)) + (d1 * (x ^ 3)) + (e1 * (x ^ 4)) + (f1 * (x ^ 5)) + (g1 * (x ^ 6))

    cpTyf = Range("AX" & iCntr)

    'Function Roh(t) Tyfocor 35%
    a2 = 1045
    b2 = -0.453
    c2 = 0.0051
    d2 = 0.00007
    e2 = -0.0000007
    f2 = 0.000000004
    g2 = -0.00000000001

    RohTyf = a2 + (b2 * x) + (c2 * (x ^ 2)) + (d2 * (x ^ 3)) + (e2 * (x ^ 4)) + (f2 * (x ^ 5)) + (g2 * (x ^ 6))

    RohTyf = Range("AY" & iCntr)

    'Collector capacity

    Puse_coll = (MIDsolar / 3600) * cpTyf * RohTyf * (Koll_aus_o - Koll_ein_o)

    Puse_coll = Range("AZ" & iCntr)

    'Solar capacity
    Psolar = Globalstrahlung * 18.12

    Psolar = Range("BA" & iCntr)

    'Collector efficiency
    If Globalstrahlung = 0 Then
    Coll_eff = 0

    ElseIf Globalstrahlung <> 0 Then
    Coll_eff = (Puse_coll) / (Psolar)

    End If

Coll_eff = Range("BB" & iCntr)

Range("BB" & iCntr).HorizontalAlignment = xlCenter

Range("BB" & iCntr).NumberFormat = "0.00"


Next

End Sub

2 个答案:

答案 0 :(得分:2)

当你做这样的事情时:

Dim a1, a2, b1, b2, c1, c2, d1, d2, e1, e2, f1, f2, g1, g2, x As Double

只将x声明为Double数据类型,其他所有内容都声明为Variant。

第二点,类似

cpTyf = Range("AX" & iCntr)

其中cpTyf是Variant可能会导致意外结果,因为您没有明确声明要访问范围对象的.Value属性。

但是在回答你的问题时,我会假设你正在以错误的方式操作你的陈述(除非你想分配一个值,然后立即分配一个完全不同的值?)。

而不是:

Puse_coll = (MIDsolar / 3600) * cpTyf * RohTyf * (Koll_aus_o - Koll_ein_o)

Puse_coll = Range("AZ" & iCntr)

使用

Puse_coll = (MIDsolar / 3600) * cpTyf * RohTyf * (Koll_aus_o - Koll_ein_o)

Range("AZ" & iCntr).Value = Puse_coll

答案 1 :(得分:1)

尝试使用特定工作表验证Range方法,例如

Sheet1.Range("BB" & iCntr).NumberFormat = "0.00"

Sheets("name-of-sheet").Range("BB" & iCntr).NumberFormat = "0.00"

您可以使用With语句为自己节省一些输入,如下所示:

With Sheets("My Sheet")

    ' more code

    .Range("BB" & iCntr).NumberFormat = "0.00"
End With