Function 调用代码前面定义的函数后,Excel将无响应

Function 调用代码前面定义的函数后,Excel将无响应,function,excel,vba,Function,Excel,Vba,在我的vba代码中,我尝试使用Erlang计算器。我知道Erlang代码可以工作,因为我以前单独使用过它,但是当我将Erlang代码复制/粘贴到另一个模块/代码顶部时,我似乎无法调用所需的函数。当我调用它时,Excel会变得无响应,并占用大量内存。我知道这可能意味着某个地方有一个无限循环,但我不知道它在哪里,或者这是否是我不知道的另一个问题 Erlang计算器是一个免费的程序,我很高兴将这一点归功于这个精巧的计算 我正在调用的函数:agentno() ”1.0版Joanne Sparkes,Ex

在我的vba代码中,我尝试使用Erlang计算器。我知道Erlang代码可以工作,因为我以前单独使用过它,但是当我将Erlang代码复制/粘贴到另一个模块/代码顶部时,我似乎无法调用所需的函数。当我调用它时,Excel会变得无响应,并占用大量内存。我知道这可能意味着某个地方有一个无限循环,但我不知道它在哪里,或者这是否是我不知道的另一个问题

Erlang计算器是一个免费的程序,我很高兴将这一点归功于这个精巧的计算

我正在调用的函数:agentno()

”1.0版Joanne Sparkes,Expedio虚拟协助有限公司呼叫中心助手
'2008年11月18日
'---------------------------------------------------------------------------------
公共功能利用率(强度加倍,代理长度加倍)加倍
版权所有Expedio虚拟协助有限公司2008
'计算利用率或代理入住率
关于错误转到利用率错误
利用率=强度/代理人
提款出口:
如果利用率<0,则利用率=0
如果利用率>1,则利用率=1
退出功能
利用率错误:
利用率=0
恢复使用退出
端函数
公共功能顶部(强度加倍,代理长度加倍)加倍
版权所有Expedio虚拟协助有限公司2008
'Erlang-C公式的顶行
top=(强度^agents)/Application.WorksheetFunction.Fact(agents)
端函数
公共函数erlangBR(强度加倍,代理长度加倍)加倍
版权所有Expedio虚拟协助有限公司2008
'计算Erlang-C公式的求和阶乘元素
变暗k为长,最大k为长,回答为双精度
k=0
max=代理-1
答案=0
对于k=0至最大值
答案=答案+((强度^k)/Application.WorksheetFunction.Fact(k))
下一个k
erlangBR=答案
端函数
公共功能(强度加倍,代理长度加倍)加倍
版权所有Expedio虚拟协助有限公司2008
'结合了Erlang C公式Top、利用率和ErlangBR的要素
关于错误转到ERLAGCERROR
ErlangC=(最高(强度,代理))/((最高(强度,代理))+((1-利用率(强度,代理))*erlangBR(强度,代理)))
出口:
如果ErlangC<0,则ErlangC=0
如果ErlangC>1,则ErlangC=1
退出功能
错误:
继续退出
端函数
公共功能服务水平(强度加倍、代理时间加倍、目标加倍、持续时间加倍)加倍
版权所有Expedio虚拟协助有限公司2008
"服务水平的计算
关于错误转到servicelevelerror
服务级别=1-(ErlangC(强度,代理)*经验(-(代理-强度)*目标/持续时间))
Servicelevelexit:
如果Servicelevel>1,则Servicelevel=1
如果服务级别<0,则服务级别=0
退出功能
servicelevelerror:
服务级别=0
恢复Servicelevelexit
端函数
公共功能代理(强度加倍,目标加倍,持续时间加倍,服务请求加倍)不超过
版权所有Expedio虚拟协助有限公司2008
'计算所需服务级别的最小代理数
暗色剂一样长,米纳根特一样长
minagents=Int(强度)
代理人
而服务级别(强度、代理、目标、持续时间)
很抱歉代码太长,但我觉得要想真正弄清楚到底发生了什么,就需要它

无论如何,我尝试调用agentno()函数(传递所需的内容),但无法使其工作

下面是我尝试使用它的地方:

    For icount = 1 To 22
        For jcount = 1 To 6
            intensity = ((CallsForecasted(icount, jcount) / 1800) * duration) 'Calculates the intensity at each interval.
            AgentsNeeded(icount, jcount) = agentno(intensity, target, duration, servreq) '      <---         <---       <---          <---THIS IS THE ONE GIVING ME TROUBLE!!!!!!!!!!!!!!!!!!!!!!!!
        Next jcount
    Next icount
icount=1到22的

对于jcount=1到6
强度=((调用预测(icount,jcount)/1800)*持续时间)计算每个间隔的强度。

AgentsNeeded(icount,jcount)=agentno(强度,目标,持续时间,servreq)“我按照GSerg的建议做了更多的调试,是servreq导致了问题。我不知道它实际上向函数传递了一个十进制数,所以当我发现这一点时,这是一个快速修复方法,可以让它工作


再次感谢格斯伯格,让我这样的新手走上了正确的道路D

您发布的代码不足以运行示例,它遗漏了变量的函数和值。然而,我猜你永远不会退出
而在
agentno
中/Wend
。在
agents=agents+1
上设置一个呼吸点,并手动循环,观察每个循环上的可变内容。您是正确的。它卡在while/wend循环中。有没有办法解决这个问题?我可以发布.xlsm文件吗?这样您就有了到目前为止的全部代码了?很明显,您的
servreq
没有得到满足,例如,如果它大于
1
,则可能会出现这种情况。谢谢GSerg!我做了更多的调试,发现Servicelevel只返回一个接近并最终变成1的数字。我还需要做更多的工作来解决这个问题。我感谢你在这方面的帮助和洞察力!
    For icount = 1 To 22
        For jcount = 1 To 6
            intensity = ((CallsForecasted(icount, jcount) / 1800) * duration) 'Calculates the intensity at each interval.
            AgentsNeeded(icount, jcount) = agentno(intensity, target, duration, servreq) '      <---         <---       <---          <---THIS IS THE ONE GIVING ME TROUBLE!!!!!!!!!!!!!!!!!!!!!!!!
        Next jcount
    Next icount