Проблема с WorksheetFunction.Norm_S_Inv () - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь сделать модель Монте-Карло для 5000 испытаний.Кажется, у меня странная проблема с

g = WorksheetFunction.Norm_S_Inv(Rnd())

Во время работы цикла (из 5000 испытаний) сначала он работает, но затем появляется сообщение об ошибке:

Run-time error "1004": Method 'Norm_S_Inv' of object 'WorksheetFunction' failed

Я проверил на многих сайтах VBA и, похоже, не нашел решения.Я также проверил с

  • Application.WorksheetFunction.Norm_S_Inv(Rnd())
  • с WorksheetFunction.Norm_S_Inv(Rnd())
  • с WorksheetFunction.Norm.S.Inv
  • с Application.WorksheetFunction.Norm.S.Inv(Rnd())
  • с WorksheetFunction.NormSInv

Заранее спасибо,

1 Ответ

0 голосов
/ 31 марта 2019

Это происходит, когда ваш Rnd() возвращает значение 0 или 1, что, конечно, является приемлемым значением для функции Rnd(), но не является входом для Norm_S_Inv(). * 1006.*

Я легко могу воспроизвести это на своем компьютере (мой Excel на итальянском языке, фактически я получаю код 1004, но текст на моей стороне скорее говорит: «Не удается найти свойство Norm_S_Inv для класса WorksheetFunction):

g = WorksheetFunction.Norm_S_Inv(0.14)
Debug.Print g
>>> -1.08031934081496

g = WorksheetFunction.Norm_S_Inv(0) 'or g = WorksheetFunction.Norm_S_Inv(1)
>>> 

enter image description here

Чтобы избежать этого, убедитесь, что вы не получаете 0 или 1 в качестве входов вашей функции:

myRand = Rnd()
Do Until (myRand <> 0 And myRand <> 1)
    myRand = Rnd()
Loop
g = WorksheetFunction.Norm_S_Inv(myRand) 

Личное примечание: это кажется довольно плохой обработкой ошибок, выполненной для этой функции, сообщение об ошибке не совсем ясно, и я понимаю ваше разочарование в поиске основной причины.

...