Закрыть скетчап из Excel

Я открываю Sketchup из Excel, затем запускаю плагин. Я использую приведенный ниже код, чтобы открыть 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 должно представлять «нет», и программа должна закрыться, она не распознает «n» для «нет».

введите здесь описание изображения

Если ключи отправки не работают, кто-нибудь знает, как закрыть SketchUp из Excel?


person Davesexcel    schedule 29.10.2018    source источник


Ответы (3)


Это должно работать:

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

Как показано здесь:

TaskKill: завершение процессов из командной строки (CMD)

и вторая половина этого ответа:

Выполнение команды в командной строке с помощью Excel VBA

person Poyda    schedule 11.11.2019

Начиная со SketchUp 2015, в SketchUp Ruby есть модель Model#close. API. При вызове с параметром true изменения игнорируются. Он не закрывает приложение, но переводит вас в состояние, когда вы можете закрыть приложение, не задумываясь о сохранении показа.

person Eneroth3    schedule 10.05.2019
comment
Спасибо за ответ, я хотел закрыть приложение. - person Davesexcel; 10.05.2019
comment
Я думаю, что ваш существующий метод отправки ключей будет работать, если вы сначала используете этот подход для отмены изменений модели. Кстати, какие изменения модели вы хотите отменить? Если вы просто читаете файлы, не изменяя их, SketchUp не должен запрашивать сохранение. - person Eneroth3; 11.05.2019
comment
Что происходит, Excel открывает SketchUp, затем с помощью клавиш отправки переходит в меню расширений и выбирает подключаемый модуль для запуска, подключаемый модуль создает рисунок на основе информации в рабочей книге Excel и помещает изображение на рабочий лист Excel. Затем Excel использует клавиши отправки, чтобы закрыть SketchUp. - person Davesexcel; 11.05.2019
comment
Если изменения, которые расширение вносит в модель, заключены в операцию , вы также можете вызвать Sketchup.undo после экспорта, чтобы вернуть модель в исходное состояние. После этого нажатие клавиши Alt-File-Exit должно позволить выйти из SketchUp без каких-либо вопросов. - person Eneroth3; 11.05.2019

Поскольку вы запускаете процесс из Excel, вы можете получить processID, который вы запустили, возвращенный из OpenProcess. Вы также можете импортировать TerminateProcess и используя processID, который вы получили от OpenProcess, закройте (Завершите) его.

person Paul Farry    schedule 24.01.2020