在 VBA 中执行最小化的 Shell 对象

Posted

技术标签:

【中文标题】在 VBA 中执行最小化的 Shell 对象【英文标题】:Shell Object with minimized execution in VBA 【发布时间】:2020-06-02 12:52:58 【问题描述】:

我想用下面的代码最小化shell窗口的执行和python脚本的执行:

Sub RunPython()
    Dim oShell, oExec as Object
    Dim sriptPath, scriptName, datas, oCmd as String
    Dim weekNumber as Integer

    Set oShell = CreateObject("WScript.Shell")
    oCmd = "python.exe " & scriptPath & scriptName & " " & datas & " " & Str(weekNumber)
    Set oExec = oShell.Exec(oCmd)
    'We are waiting for the Shell script to be executed'
    While oExec.Status = 0
    Wend
    MsgBox "Hagrid notebook update completed"
End Sub

必须保留oExec 对象的状态信息。我试图插入概念vbMinimizedFocus,但它不起作用。你有解决这个困难的想法吗?

【问题讨论】:

【参考方案1】:

根据我的测试,这两个版本都可以使用.Status

选项 1。 使用 pythonw.exe 而不是 python.exe - 它不会最小化窗口,而是完全在后台运行。

选项 2. 您可以在 python 脚本的开头添加 2 行:

import ctypes
ctypes.windll.user32.ShowWindow( ctypes.windll.kernel32.GetConsoleWindow(), 6 )

【讨论】:

以上是关于在 VBA 中执行最小化的 Shell 对象的主要内容,如果未能解决你的问题,请参考以下文章

寻找用于 VBA 的功能最小化器

XSLT可以在OS级别执行shell脚本吗?

在 VBA 中的字典值中查找最大值/最小值

VBA宏返回列表中的最小值?

用于在多张纸上循环的范围内查找最大值和最小值的 VBA 代码

在 Vba 列的范围内查找最小值和最大值