я хочу не просто закрыть окно и использовать это в если.... принципе можно в код вписать переключатель, один макрос его при появление включает другой выключает но как то все это безумно громоздко -постоянно работающий макрос вносит свои неудобства. а выключить его не закрывая файл пока не получается. хотя можно попробовать тот же выключатель для этого нарисовать.
я хочу не просто закрыть окно и использовать это в если.... принципе можно в код вписать переключатель, один макрос его при появление включает другой выключает но как то все это безумно громоздко -постоянно работающий макрос вносит свои неудобства. а выключить его не закрывая файл пока не получается. хотя можно попробовать тот же выключатель для этого нарисовать.AlexMen
lebensvoll отпишите на почту, а то меня _Boroda_ забанил, я Вам функцию сброшу
Я больше скажу: все эти манипуляции с AppActivate и SendKeys еще и недостаточно надёжны и, строго говоря, не совсем безопасны. То, что во время такой обработки лучше не работать вручную с клавиатуры и не держать других открытых приложений, кроме двух необходимых - это к гадалке не ходи!
AlexMen, а ваш макрос нельзя запускать, скажем, по ночам, когда больше с рабочей книгой никто не работает?
Я больше скажу: все эти манипуляции с AppActivate и SendKeys еще и недостаточно надёжны и, строго говоря, не совсем безопасны. То, что во время такой обработки лучше не работать вручную с клавиатуры и не держать других открытых приложений, кроме двух необходимых - это к гадалке не ходи!Gustav
вот поэтому и хочу эту процедуру воткнуть в модуль что бы вызывался ток когда есть шанс возникновения.... после внесения данных, запускается, сохраняет данные если окно , то его отрубает, заново заносит массив, если удачно процесс убивается. Вопрос уже не критичный, чисто для себя хочу докопаться до истинны.
вот поэтому и хочу эту процедуру воткнуть в модуль что бы вызывался ток когда есть шанс возникновения.... после внесения данных, запускается, сохраняет данные если окно , то его отрубает, заново заносит массив, если удачно процесс убивается. Вопрос уже не критичный, чисто для себя хочу докопаться до истинны.AlexMen
lebensvoll отпишите на почту, а то меня _Boroda_ забанил, я Вам функцию сброшу
Не внимательно читали, Set objExl = Nothing просто память освобождает. Можно добавить в код, т.к. переменная objExl - глобальная и не убивается после завершения макроса, но само приложение Экселя от этого не закроется. Смотрите пример.
Не внимательно читали, Set objExl = Nothing просто память освобождает. Можно добавить в код, т.к. переменная objExl - глобальная и не убивается после завершения макроса, но само приложение Экселя от этого не закроется. Смотрите пример.Manyasha
Workbooks("CommonTest.xlsx").Save 'здесь имя своей книги с общим доступом
status = xlApp.Workbooks(1).Worksheets(1).Range("A1").Value xlApp.Workbooks(1).Worksheets(1).Range("A3").Value = "stop"
MsgBox "Подождём-с..." 'закроется само благодаря последнему пинку от OnTime, либо надо вставить иную задержку на пару секунд xlApp.Workbooks(1).Close False xlApp.Quit Set xlApp = Nothing
If status = "Конфликт обработан" Then MsgBox "Вы опоздали! :-(" Else MsgBox "Вы успели! :-)" End If
End Sub
[/vba]
Уф! По мотивам всех идей данного обсуждения родилась процедура, которая, возможно, порадует AlexMen
[vba]
Код
Sub saveCommonBook()
Dim xlApp As Excel.Application Dim vb As String Dim status As String
Workbooks("CommonTest.xlsx").Save 'здесь имя своей книги с общим доступом
status = xlApp.Workbooks(1).Worksheets(1).Range("A1").Value xlApp.Workbooks(1).Worksheets(1).Range("A3").Value = "stop"
MsgBox "Подождём-с..." 'закроется само благодаря последнему пинку от OnTime, либо надо вставить иную задержку на пару секунд xlApp.Workbooks(1).Close False xlApp.Quit Set xlApp = Nothing
If status = "Конфликт обработан" Then MsgBox "Вы опоздали! :-(" Else MsgBox "Вы успели! :-)" End If
Густав спасибо за познавательный пример, как создать модуль "на лету", запустить процедуру из него и после отработки уничтожить. Прям ракета двухступенчатая получилась. ))))
Густав спасибо за познавательный пример, как создать модуль "на лету", запустить процедуру из него и после отработки уничтожить. Прям ракета двухступенчатая получилась. ))))al-Ex
Сообщение отредактировал al-Ex - Воскресенье, 13.03.2016, 09:43