为什么运行代码时工作表中没有结果。我的代码有问题吗?有人可以验证。这是我的代码:
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
答案 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