在VBA中写一个函数返回一个三angular形的随机数

我正在尝试为excel编写一系列VBA函数,它将返回随机数字types以在子例程中调用。 一旦我进入更复杂的公式,我会遇到类似的错误。 例如:非对称三angular随机variables。

这是function:

Function AsymetricTriangleInVBA (min As Double, mode As Double, max As Double) As Double Application.Volatile Randomize Dim Temp As Variant Temp = Rnd AsymetricTriangleInVBA = WorksheetFunction.if(Temp < ((mode - min) / (max - min)), min + (max - min) * WorksheetFunction.sqrt(((mode - min) / (max - min)) * Temp), min + (max - min) * (1 - WorksheetFunction.sqrt((1 - ((mode - min) / (max - min))) * (1 - Temp)))) End Function 'my test sub Sub test() MsgBox AsymetricTriangleInVBA(5, 10, 15) End Sub 

我收到的一致性错误是:

运行时错误“438”:对象不支持此属性或方法

这个错误是什么意思,我该如何解决?

我通常不会使用WorksheetFunction只要VBA本身具有相同的可用性…在这种情况下, SQR

我认为可以使其工作的两种方式

1)

 Function AsymetricTriangleInVBA(min As Double, mode As Double, max As Double) As Double Application.Volatile Dim intCondition As Integer Randomize Dim Temp As Variant Temp = Rnd intCondition = CInt(Temp < ((mode - min) / (max - min))) * -1 AsymetricTriangleInVBA = intCondition * (min + (max - min) * Sqr(((mode - min) / (max - min)) * Temp)) + (1 - intCondition) * (min + (max - min) * (1 - Sqr((1 - ((mode - min) / (max - min))) * (1 - Temp)))) End Function 

2)

 Function AsymetricTriangleInVBA(min As Double, mode As Double, max As Double) As Double Application.Volatile Randomize Dim Temp As Variant Temp = Rnd If Temp < ((mode - min) / (max - min)) Then AsymetricTriangleInVBA = (min + (max - min) * Sqr(((mode - min) / (max - min)) * Temp)) Else AsymetricTriangleInVBA = (min + (max - min) * (1 - Sqr((1 - ((mode - min) / (max - min))) * (1 - Temp)))) End If End Function