【问题标题】:Close sketchup from Excel从 Excel 关闭草图
【发布时间】:2019-04-02 16:41:19
【问题描述】:

我从excel打开sketchup,然后运行一个插件,我用下面的代码打开sketchup,然后用SendKeys选择插件。

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Sub fLaunchProgram(ByVal sProgram As String)
    Dim ProcessHandle As Long
    Dim ProcessId As Long
    On Error GoTo errExit
    ProcessId = Shell(sProgram, vbNormalFocus)
    ProcessHandle = OpenProcess(&H1F0000, 0, ProcessId)
    WaitForSingleObject ProcessHandle, INFINITE
    Exit Sub

errExit:
    MsgBox "External program " & sProgram & " was not found", vbCritical, " fLaunchProgram"
End Sub
'To load SU
Sub pTest()
    fLaunchProgram ("C:\Program Files\SketchUp\SketchUp 2015\SketchUp.exe")
End Sub

Sub Button1_Click()

    pTest
    SendKeys "~ (tilde)"
    SendKeys "%{left}{DOWN}n~"

    SendKeys "%x{DOWN}~"
    SendKeys "{NUMLOCK}", True
    SendKeys "%fx"
    SendKeys "n"
End Sub

最后几行代表Alt-File-Exit,然后弹出msgbox,n应该代表“no”,程序应该关闭,它不识别“n”代表“no”

如果发送键不起作用,有人知道如何从 Excel 中关闭 SketchUp 吗?

【问题讨论】:

    标签: excel vba sketchup


    【解决方案1】:

    这应该可行:

    Shell "taskkill /F /IM sketchup.exe", vbNormalFocus

    如下图:

    TaskKill: Kill processes from the command line (CMD)

    这个答案的后半部分:

    Execute a command in command prompt using excel VBA

    【讨论】:

      【解决方案2】:

      自 SketchUp 2015 以来,SketchUp Ruby API 中有一个 Model#close 模型。如果使用 true 作为参数调用,它会忽略更改。它不会关闭应用程序,但它会让您进入一个状态,您可以关闭应用程序,而不会对保存显示有任何疑问。

      【讨论】:

      • 感谢回复,我想关闭应用程序。
      • 我认为,如果您首先使用这种方法来丢弃模型更改,那么您现有的方法会发送密钥。顺便说一句,您要丢弃哪些模型更改?如果您只是读取文件而不更改它们,SketchUp 不会提示您保存。
      • 发生了什么,excel正在打开sketchup,然后使用发送键移动到扩展菜单并选择要运行的插件,插件会根据excel工作簿上的信息创建一个绘图并将图像到 excel 工作表上。然后excel使用发送键关闭sketchup。
      • 如果扩展对模型所做的更改包含在 operation 中,您还可以在导出后调用 Sketchup.undo 以将模型重置为未修改状态。完成此操作后,您的 Alt-File-Exit 按键应该能够毫无问题地退出 SketchUp。
      【解决方案3】:

      当您在 Excel 中启动进程时,您可以获得从 OpenProcess 返回的您启动的 processID。您还可以导入 TerminateProcess 并使用从 OpenProcess 获得的 processID 关闭(终止)它。

      【讨论】:

        猜你喜欢
        • 2019-05-01
        • 1970-01-01
        • 2011-06-19
        • 2011-12-26
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2014-08-28
        • 1970-01-01
        相关资源
        最近更新 更多