Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 21
1

Ожидание завершения внешнего скрипта

01.01.2016, 21:33. Показов 3671. Ответов 6
Метки нет (Все метки)

Друзья, всем добра и С новым годоМ!

Я все чаще замечаю, что меня как будто кто-то подменил...

Я тут пытаюсь одну хитрость сделать. Есть такая штука, Autodesk Inventor называется. Кто-то знает, а кто не знаком - это такой довольно мощный САПР со своим встроенным API и интегрированным VBA

Сейчас я делаю для Инвентора одну программку на VBA. В этой программе используются скрипты на Python.
Но есть один важный момент - я весьма глубокий чайник в программировании вообще любом))
Запустить эти скрипты из кода VBA я научился. А вот теперь хочется сделать так, чтоб программа VBA продолжала работать только после завершения работы этого скрипта.

Кто-нибудь знает, как это сделать? Прошу помощи!)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.01.2016, 21:33
Ответы с готовыми решениями:

Ожидание завершения сохранения видео файла в PowerPoint
Приветствую, средствами vba хочу сохранить видео и дождаться пока PowerPoint не сохранит и потом...

Запуск внешнего скрипта и ожидание его завершения
поможите советом, а лучше кодом )) мне нужно запустив скрипт (VBS) отследить его PID в процессах и...

Ожидание завершения потока
private void button1_Click(object sender, EventArgs e) { ...

Ожидание завершения системы
Как возможно сделать, чтобы программа при том что пользователь выключает компьютер или ставит его в...

6
Наблюдатель
457 / 192 / 33
Регистрация: 01.05.2012
Сообщений: 1,028
02.01.2016, 07:42 2
Я не знаю.

Цитата Сообщение от lexa24 Посмотреть сообщение
Я все чаще замечаю, что меня как будто кто-то подменил...
Мы с тобой давно уже не те
Мы с тобой давно уже не те,
Мы не живем делами грешными,
Спим в тепле, не верим темноте,
А шпаги на стену повешены.
В нашей шхуне сделали кафе,
Hа тумбу пушку искаверкали,
Истрачен порох фейерверками,
Hа катафалк пошел лафет.

Мы с тобой давно уже не те,
И нас опасности не балуют,
Кэп попал в какой-то комитет,
А боцман служит вышибалою.
Hас уже не радует роса,
Hа парусах мы не разляжемся,
Пустил артельщик разгулявшийся
Hа транспаранты паруса.

Мы с тобой не те уже совсем,
И все дороги нам заказаны,
Спим в тепле на средней полосе,
Избрали горорд вечной базою.
Знаю, нам не пережить зимы,
А шхуна, словно пес на привязи,
Кривая никуда не вывезет,
А море ждет нас, черт возьми!

Море ждет, а мы совсем не там!
Такую жизнь пошлем мы к лешему!
- Боцман ! - я ! - ты будешь капитан!
Hаденем шпаги потускневшие.
Мы с тобой пройдем по кабакам,
команду старую разыщем мы,
А здесь, а здесь мы - просто лишние.
Давай, командуй, капитан!
Юрий Аделунг


Но когда мне надо было сделать аналогичное в двух не связанных между собой системах программирования я сделал просто.

Программа А при периодически проверяет в конкретном месте наличие файла (например Report.txt) и при его нахождении удаляет его оттуда и что то там выполняет .

Программа Б после окончания своей работы в это конкретное место помещает файл Report.txt

ps подобным образом я имитировал передачу данных между одной прогой работающей на разных компах в сети. При том факте, что количество компов не лимитировалось.


Ну и с новым годом!!!
1
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 21
02.01.2016, 09:55  [ТС] 3
Ну, собственно, это один из путей решения, о котором я тоже подумал.
Либо файл, либо записать в в файл определенное кодовое слово, которое будет сигналом к действию.
Пишут, что можно использовать функцию Shell, у которой есть аргумент ожидания. Но я вот пока не очень понял, как ей пользоваться))
Вообще говоря, у меня не вот уж как обязательно строго по окончанию скрипта. Можно и закостылить - по времени с запасом дать задержку. Некрасиво, но наверняка))
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
30445 / 16818 / 3461
Регистрация: 12.02.2012
Сообщений: 28,184
Записей в блоге: 5
02.01.2016, 10:28 4
lexa24, добавь в проект вот этот модуль:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'############### БЛОК ПРОГРАММ ОБЕСПЕЧЕНИЯ ПРОЦЕССОВ ###################
'###############   Позаимствовано у Брюса МакКинни   ###################
 
Const PROCESS_ALL_ACCESS = 2035711 '(&H1F0FFF)
 
Const INFINITE = -1                '(&HFFFFFFFF)
 
Const STILL_ACTIVE = 259           '(&H103)
 
Const WAIT_FAILED = -1             '(&HFFFFFFFF)
 
 
Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
                                             ByVal bInheritHandle As Long, _
                                             ByVal dwProcessId As Long) As Long
 
 
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
                                                     ByVal dwMilliseconds As Long) As Long
 
 
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, _
                                                          lpExitCode As Long) As Long
 
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
 
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::   Ожидать завершения процесса и получить код завершения      :::::
':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
Function WaitOnProgram(ByVal idProg As Long, _
              Optional ByVal WaitDead As Boolean) As Long
 
Dim cRead   As Long
Dim iExit   As Long
Dim hProg   As Long
Dim iResult As Long
 
    '::: Получаем хэндл процесса
 
    hProg = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
 
    If (WaitDead) Then
 
       '::: Ждем до победного конца
       
       iResult = WaitForSingleObject(hProg, INFINITE)
 
       '::: Если ожидание завершилось неудачно - возбудим ошибку
 
       If (iResult = WAIT_FAILED) Then ErrRaise Err.LastDllError
 
       '::: Получаем код завершения
 
       GetExitCodeProcess hProg, iExit
 
    Else
 
       '::: Пробуем получить код завершения
 
       GetExitCodeProcess hProg, iExit
 
       '::: Если процесс все еще в состоянии выполнения,
       '::: не дадим системе зависнуть
 
       Do While (iExit = STILL_ACTIVE)
          DoEvents
          GetExitCodeProcess hProg, iExit
       Loop
 
    End If
 
    '::: Закроем хендл
 
    CloseHandle hProg
 
    WaitOnProgram = iExit
 
End Function
 
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
'::::   Запустиь программу ProgName с командной строкой CmdLine,   ::::
'::::   получением кода завершения RC в окне стиля winStyle        ::::
'::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
Public Sub ExecPrg(ProgName As String, _
                   CmdLine As String, _
                   RC As Long, _
                   winStyle As Integer)
 
Dim idProc As Long, iExit As Long
 
    idProg = Shell((ProgName + " " + CmdLine), winStyle)
 
    iExit = WaitOnProgram(idProg)
 
    RC = iExit
 
End Sub
Пользоваться так:

Visual Basic
1
  ExecPrg "Имя_программы", "Командная_строка_программы", Код_завершения, Стиль_окна
Код VBA продолжит работу только после завершения внешней программы.
3
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 21
02.01.2016, 10:37  [ТС] 5
Эх, мама дорогая, как же много букв))) И выглядит глобально так)
Хорошо быть грамотным все-таки) Спасибо, буду пробовать)
0
15038 / 6362 / 1726
Регистрация: 24.09.2011
Сообщений: 9,971
02.01.2016, 16:26 6
Лучший ответ Сообщение было отмечено lexa24 как решение

Решение

Цитата Сообщение от lexa24 Посмотреть сообщение
Пишут, что можно использовать функцию Shell, у которой есть аргумент ожидания
Visual Basic
1
CreateObject("WScript.Shell").Run("путь_к_скрипту", 0, True)
Подробнее тут: http://www.script-coding.com/W... .html#3.4.
3
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 21
02.01.2016, 17:15  [ТС] 7
Цитата Сообщение от Казанский Посмотреть сообщение
Visual BasicВыделить код
1
CreateObject("WScript.Shell").Run("путь_к_скрипту", 0, True)
Подробнее тут: http://www.script-coding.com/WSH/WshShell.html#3.4.
__________________
Спасибищщщщще!!! все бесподобно работает! А как красиво-то!
Благодаря таким товарищщщщщам, как Казанский, я становлюсь умнее))))

Спасибо, получилось)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2016, 17:15

Ожидание завершения процесса по ID
Всем доброго времени суток, подскажите пожалуйста как решается такая задача: есть ID процесса,...

Ожидание завершения анимации
Есть вот такая страничка: Картинка.gif /вставка через аттач корябит изображение, поэтому прилагаю...

Ожидание завершения процесса
Опишу задачу. Исполнимая среда - Windows XPE. Из "Автозагруки" необходимо запускать батник с...

Ожидание завершения рекурсии
Приветствую. Прошу научить меня сабжу. Собственно как можно дождаться полного завершения рекурсии?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru