在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