Vba 函数中的数据类型错误

Vba 函数中的数据类型错误,vba,excel,Vba,Excel,我得到了一个非常恼人的“这个公式中使用的值是错误的数据类型”错误,我一辈子都搞不清楚是什么导致了它 Public Function Cc(q As Double, ID As Double) As Double Dim YP As Double 'lb/100ft^2 Dim Fan600 As Single Dim Fan300 As Single Dim n As Double 'Flow behavior index Dim K As Dou

我得到了一个非常恼人的“这个公式中使用的值是错误的数据类型”错误,我一辈子都搞不清楚是什么导致了它

Public Function Cc(q As Double, ID As Double) As Double

Dim YP As Double            'lb/100ft^2
Dim Fan600 As Single
Dim Fan300 As Single
Dim n As Double             'Flow behavior index
Dim K As Double             'Consistency index

Dim Form As Worksheet
Set Form = ThisWorkbook.Worksheets("ECD Generator")

'=========================================================================================================

YP = Form.Cells(5, 10).Value
Fan600 = Form.Cells(6, 10).Value
Fan300 = Form.Cells(7, 10).Value

'=========================================================================================================

n = 3.32 * WorksheetFunction.Log10(Fan600 / Fan300)
K = 5.1 * Fan600 / (1022 ^ n)

Cc = 1 - (1 / (2 * n + 1)) * (YP / (YP + K * ((3 * n + 1) * q / (n * WorksheetFunction.Pi * (ID / 2) ^ 3)) ^ n))

End Function

在Excel 2013中运行此代码时,
Cc=…
表达式抛出“表达式太复杂”错误。通过使用临时变量简化表达式:

n = 3.32 * WorksheetFunction.Log10(Fan600 / Fan300)
K = 5.1 * Fan600 / (1022 ^ n)

'Add these temp variables to make the "Cc = ..." expression less complex.

Dim t1 As Double
t1 = 1 / (2 * n + 1)

Dim t2 As Double
t2 = n * WorksheetFunction.Pi * (ID / 2) ^ 3

Cc = 1 - t1 * (YP / (YP + K * ((3 * n + 1) * q / t2) ^ n))
'Cc = 1 - (1 / (2 * n + 1)) * (YP / (YP + K * ((3 * n + 1) * q / (n * WorksheetFunction.Pi * (ID / 2) ^ 3)) ^ n))

在Excel 2013中运行此代码时,
Cc=…
表达式抛出“表达式太复杂”错误。通过使用临时变量简化表达式:

n = 3.32 * WorksheetFunction.Log10(Fan600 / Fan300)
K = 5.1 * Fan600 / (1022 ^ n)

'Add these temp variables to make the "Cc = ..." expression less complex.

Dim t1 As Double
t1 = 1 / (2 * n + 1)

Dim t2 As Double
t2 = n * WorksheetFunction.Pi * (ID / 2) ^ 3

Cc = 1 - t1 * (YP / (YP + K * ((3 * n + 1) * q / t2) ^ n))
'Cc = 1 - (1 / (2 * n + 1)) * (YP / (YP + K * ((3 * n + 1) * q / (n * WorksheetFunction.Pi * (ID / 2) ^ 3)) ^ n))

根据您在注释中提供的值,我得到了一个不同的错误

16:表达太复杂了

可以找到有关此错误的信息。基本上,在一次计算中发生了太多的数学运算

为了解决这个问题,我将
Cc
分为两部分,这就克服了错误。我意识到这不是你在问题中显示的错误,但它们很有可能是相关的

尝试以下代码行的替换
Cc

Cc = n * WorksheetFunction.Pi * (ID / 2) ^ 3
Cc = 1 - (1 / (2 * n + 1)) * (YP / (YP + K * ((3 * n + 1) * q / Cc) ^ n))

为了确认,这将用两行替换以
Cc=
开头的单行。

使用您在注释中提供的值,我得到了一个不同的错误

16:表达太复杂了

可以找到有关此错误的信息。基本上,在一次计算中发生了太多的数学运算

为了解决这个问题,我将
Cc
分为两部分,这就克服了错误。我意识到这不是你在问题中显示的错误,但它们很有可能是相关的

尝试以下代码行的替换
Cc

Cc = n * WorksheetFunction.Pi * (ID / 2) ^ 3
Cc = 1 - (1 / (2 * n + 1)) * (YP / (YP + K * ((3 * n + 1) * q / Cc) ^ n))

为了确认,这将用两行替换以
Cc=
开头的单行。

错误出现在哪一行?大概是
n=3.32*WorksheetFunction.Log10(Fan600/Fan300)
?我相信在Cc=…如果我在Cc=上打破它,到目前为止一切似乎都运行良好。n和k的计算考虑使用
Log(Fan600/Fan300)/Log(10)
以获得更好的可移植性(也许还有性能)。请告诉我们使用F8失败的原因,我相信它的
n=3.32*工作表函数。Log10(Fan600/Fan300)
因为你有两个
单数
除以然后用作双数。但也可能是
WorksheetFunction.Pi
的末尾应该有括号
WorksheetFunction.Pi()
。我们需要更多的信息来回答。错误出现在哪一行?大概是
n=3.32*WorksheetFunction.Log10(Fan600/Fan300)
?我相信在Cc=…如果我在Cc=上打破它,到目前为止一切似乎都运行良好。n和k的计算考虑使用
Log(Fan600/Fan300)/Log(10)
以获得更好的可移植性(也许还有性能)。请告诉我们使用F8失败的原因,我相信它的
n=3.32*工作表函数。Log10(Fan600/Fan300)
因为你有两个
单数
除以然后用作双数。但也可能是
WorksheetFunction.Pi
的末尾应该有括号
WorksheetFunction.Pi()
。我们需要更多的信息来回答。谢谢!当方程变得太长时,这个错误会突然出现吗?我对VBA不太熟悉。但我知道它有一些“有趣”的行为,这在大多数其他语言中是不存在的。谢谢!当方程变得太长时,这个错误会突然出现吗?我对VBA不太熟悉。但我知道它有一些“有趣”的行为,这在大多数其他语言中是不存在的。谢谢你的帮助!刚刚被打败了!很高兴我们到了那里。谢谢你的帮助!刚刚被打败了!很高兴我们到了那里。