VBScript:被应用程序拒绝的Excel应用程序对象状态栏调用

当我尝试获取Excel的状态栏string时,出现VBScript错误。 请参阅以下代码中的注释。 我试图把objExcel.DisplayStatusBar = True在错误的行上面,但是那行错误。 这告诉我关于objExcel出错了(?)。 如果我在错误的行之前放置了一个msgbox,它会挂起整个vbs(预期的)。 这个vbs在早上运行,所以当我看到popup的msgbox并点击OK时,所有的系统都已经完成,除了由于msgbox挂起的vbs之外。 我在msgbox上单击确定,我得到没有错误。 我等待定时循环的原因是因为macrosCreateModel有一些Application.OnTime调用返回到CreateModel,这是超出这个问题的理由所必需的。 VBScript不会“知道”我有OnTime调用,所以如果我不“等待”它将继续其余的vbs代码,并因其他原因搞砸了。 所以我必须等待,并使用状态栏来了解何时完成。 我不能做一个纯粹的定时等待,因为CreateModel的处理时间及其关联的OnTime调用会有很大的变化。

这有点令人困惑。 寻找debuggingbuild议和/或解决scheme,如果你有任何。

编辑:如果有人知道如何创build线路sStatus = objExcel.StatusBar错误“呼叫拒绝被调用者”,这将帮助我debugging。

编辑2:这是一个错误的图片。 该脚本是一个.vbs文件。 为了保护我的客户,我必须弄清楚path:

错误图片

VBScript中:

Dim objExcel, wMn, r, wT Set objExcel = CreateObject("Excel.Application") Set wMn = objExcel.Workbooks.Open("Z:\path\Model_*.xlsm") objExcel.Application.Visible = True objExcel.Run "'Z:\path\" & wMn.Name & "'!CreateModel" 'wait until model is finished 'have to do this because Application.OnTime is called in CreateModel and vbs doesn't wait Dim sStatus Dim dteWait Do dteWait = DateAdd("s", 600, Now()) '60 = 60 secs, 600 = 10 mins Do Until (Now() > dteWait) Loop 'objExcel.DisplayStatusBar = True '<-- if I include this line I get the same error, but for this line 'msgbox objExcel.StatusBar '<-- when I include this line no error occurs, see notes at top sStatus = objExcel.StatusBar '<-- main error/issue Loop While not sStatus = "Model Finished" 'more code below, but omitted for clarity 

我将指定一个单元格,给它一个命名的范围值(例如,“macroDoneCheck”),并让macros载入一个“完成”的值,你可以在你的VBS中检查。 在VBS中等待/检查这个单元值的循环是这样的:

 Do WScript.Sleep(30000) 'wait 30 seconds isDone = objExcel.Range("macroDoneCheck") Loop While not isDone = "Complete" 

或类似的东西。 您也可能需要指定表格,例如:

  isDone = objExcel.Sheets("Sheet1").Range("macroDoneCheck") 

我相信n8。 用最好的答案,因为这是一个更好的办法,但这个答案是较less的工作,它运作良好。

从我原来的代码/问题,包装sStatus = objExcel.StatusBar像这样:

 on error resume next sStatus = objExcel.StatusBar on error goto 0 

再次,只是一个select的答案n8。 提供。 它的工作原理是由于某种原因访问状态栏,而CreateModel仍在运行生产和错误,但在我的情况下,while循环继续循环,因为条件尚未满足。 我知道即使访问状态栏的某些时候会产生一个错误,因为当我用msgbox挂起vbs(请参阅原始问题的代码中的注释)时,即使条件最终会被满足,如果我让它挂得够久。 这可能是其他人可能没有经历的一个具体问题,所以要把它看作是值得的。