WScript.Shell使Excel崩溃

MJ_纳多

我正在使用WshShell在Excel中从VBA运行批处理文件。

  • 批处理文件非常简单,只需一行即可运行数字运算程序。我可以直接运行批处理文件,而不会出现问题。
  • 我使用WshShell或WScript.Shell是因为我希望VBA一旦计算完成就等待将结果加载回Excel中。
  • 我引用了“ Microsoft脚本运行时”和“ Windows脚本宿主对象模型”
  • 我已经使用相同的代码很长时间了。效果很好,直到2-3周前。现在,它关闭Excel。如果我打开了一些电子表格,它将全部关闭。
  • 我有两个版本,但是它们都在“ Set WinSh = ...”行崩溃。Excel几秒钟(约10秒钟)没有响应,然后关闭。
  • 我正在使用32位Office 365 MSO(16.0.12527.21294)。它由我的组织管理。
  • 我在Word中尝试了相同的代码,它也崩溃了。

有人知道最近的更新是否可以做到这一点?或我可以使用的另一种方法?

这些子是:

Public Sub RunBatch(FPath As String)
    Dim WinSh As Object
    Dim StrCmd As String
    Dim ErrCode As Long
    Set WinSh = New WshShell
    StrCmd = Chr(34) & FPath & Chr(34)
    ErrCode = WinSh.Run(StrCmd, WindowStyle:=1, WaitOnReturn:=True)
End Sub
  
Public Sub RunBatch2(FPath As String)
    Dim WinSh As Object
    Set WinSh = VBA.CreateObject("WScript.Shell")
    WinSh.Run FPath, 1, True
End Sub
MJ_纳多

问题的根源是Cisco AMP的安全策略的更新或更改。这会阻止Windows脚本宿主的使用。我组织的安全部门正在努力寻找解决方案。

同时,我找到了解决方法。我使用shell(在恢复VBA代码之前不等待批处理结束)来运行批处理,该批处理在过程结束时写入一个简单的文本文件,并且我等待文本文件以1秒的增量显示。它很粗糙,但到目前为止它仍然有效。

Public Sub OneRunBatch()

Dim xlWB As Workbook
Dim fso1 As New FileSystemObject
Dim BatFile As Object
Dim IsDone As Boolean
Dim OutFileName As String
Dim DoneFileName As String
Dim OutPath As String
Dim DeleteBatFile As Boolean

Set xlWB = ThisWorkbook
OutPath = xlWB.Path
OutFileName = "HW.bat"
DoneFileName = "Done.txt"
DeleteBatFile = False

Set BatFile = fso1.CreateTextFile(OutPath & "\" & OutFileName)
BatFile.WriteLine "cd /d " & OutPath
BatFile.WriteLine "echo Hello World"
BatFile.WriteLine "dir > " & DoneFileName
BatFile.Close

IsDone = False
Call Shell(OutPath & "\" & OutFileName, vbNormalFocus)

Do Until IsDone
    If fso1.FileExists(OutPath & "\" & DoneFileName) Then IsDone = True
    Application.Wait (Now + TimeValue("00:00:01"))
Loop

fso1.DeleteFile (OutPath & "\" & DoneFileName)
If DeleteBatFile Then fso1.DeleteFile (OutPath & "\" & OutFileName)

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何找到wscript.shell的componentid?

Powershell中的ASCII(wscript.shell)

在 Excel 中使用 WScript.CreateObject

Wscript.shell.run和Wscript.shell.exec不会显示相同的输出

使用VBA WScript.Shell使用参数调用.com文件

为什么在VBS中可以默默忽略WScript.Shell?

WScript.Shell RegWrite在Windows 8.1上失败

如何使用WScript.Shell对象运行更多命令?

WScript.Shell.Exec-从标准输出读取输出

无法使WSCript.Shell对象的Run方法正常工作

为什么WScript.Shell.ExpandEnvironmentStrings无法与%CD%一起使用?

使用'WScript.Shell'对象的'Run'方法时出现运行时错误

在 HTA 应用程序内的 WScript.Shell 中发送输入值

如何在Wscript.Shell + cmd.exe中使用变量?

我可以在PHP的Linux服务器上运行新的COM(“ WScript.Shell”)吗?

如何停止失控的 wscript 命令?

在wscript中添加--all选项

VBS WScript无法执行

vba wscript.shell 根據單元格路徑或文件名將文件從文件夾複製到另一個文件夾

是否可以将脚本传递到WScript?

cscript/wscript 的 regserver 参数有什么作用?

为什么对于CreateObject不是必需的,我必须用WScript编写WScript.Echo?

Excel日期时间对象使我的Python 3.7 Shell崩溃

Windows 8 wscript.exe未运行* .vbs文件

比较wscript.arguments和字符串

在 WScript.CreateObject 中使用前缀的目的是什么?

通过现有测试后,VBS WScript.Run失败

Visual Studio代码:MS WScript IntelliSense支持来自何处?

WScript.Echo()仅打印字符串的一部分