книга совместного доступа, в неё макросом из другой книги записываются данные при синхронной записе выскакивает диалоговое окно (скрин)
Вопрос можно ли как то кодом его перехватить? мол Если выскочило такое окно то нажать кнопку в нем "сохранить все чужие записи" код msgbox "Вы опоздали"
Добрый день.
есть такая загвоздка
книга совместного доступа, в неё макросом из другой книги записываются данные при синхронной записе выскакивает диалоговое окно (скрин)
Вопрос можно ли как то кодом его перехватить? мол Если выскочило такое окно то нажать кнопку в нем "сохранить все чужие записи" код msgbox "Вы опоздали"AlexMen
Вкладка Рецензирование - Доступ к книге - вкладка Подробнее - радиокнопка "ранее сохраненные имеют преимущество". Это скроет это диалоговое окно.
Вкладка Рецензирование - Доступ к книге - вкладка Подробнее - радиокнопка "ранее сохраненные имеют преимущество". Это скроет это диалоговое окно.Karataev
Сообщение отредактировал Karataev - Суббота, 05.03.2016, 22:54
Чемпион по перехватыванию окон, - "Автоит" "Работа с окнами : передвижение, скрытие, отображение, изменение размера, активизация, закрытие и т. д. К окнам можно обращаться по их заголовку, отображаемому тексту, размеру, расположению, классу, по внутренним дескрипторам "
Чемпион по перехватыванию окон, - "Автоит" "Работа с окнами : передвижение, скрытие, отображение, изменение размера, активизация, закрытие и т. д. К окнам можно обращаться по их заголовку, отображаемому тексту, размеру, расположению, классу, по внутренним дескрипторам "al-Ex
Сообщение отредактировал al-Ex - Воскресенье, 06.03.2016, 11:55
Можно попробовать следующую схему. Запускается два отдельных экземпляра Excel. В одном идёт работа с исходной редактируемой книгой с общим доступом, для которой необходимо решать вопрос о конфликте доступа. В другом запускается некий "проверяльщик" окон, который активизируется каждые несколько секунд (в примере ниже - каждые 5 секунд). Проверяльщик представляет собой макрос (естественно, в другой рабочей книге), который при обнаружении в системе окон с заданными названиями посылает в них нужную последовательность нажатий клавиш. После проверки окон макрос самопрограммирует себя на запуск через следующие 5 секунд. [vba]
Код
Sub checkWindows() On Error Resume Next
'ищется окно о конфликте доступа AppActivate "Возник конфликт доступа" If Err Then Err.Clear Else SendKeys "{TAB 3}{ENTER}" 'нажимается Enter после 3-х Tab'ов в диалоговом окне End If
'ищется окно с сообщением "Книга обновлена с учетом изменений, внесенных другими пользователями" AppActivate "Microsoft Excel" If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
Application.OnTime Now + TimeValue("00:00:05"), "checkWindows" 'проверка окон каждые 5 секунд End Sub
[/vba]
Можно попробовать следующую схему. Запускается два отдельных экземпляра Excel. В одном идёт работа с исходной редактируемой книгой с общим доступом, для которой необходимо решать вопрос о конфликте доступа. В другом запускается некий "проверяльщик" окон, который активизируется каждые несколько секунд (в примере ниже - каждые 5 секунд). Проверяльщик представляет собой макрос (естественно, в другой рабочей книге), который при обнаружении в системе окон с заданными названиями посылает в них нужную последовательность нажатий клавиш. После проверки окон макрос самопрограммирует себя на запуск через следующие 5 секунд. [vba]
Код
Sub checkWindows() On Error Resume Next
'ищется окно о конфликте доступа AppActivate "Возник конфликт доступа" If Err Then Err.Clear Else SendKeys "{TAB 3}{ENTER}" 'нажимается Enter после 3-х Tab'ов в диалоговом окне End If
'ищется окно с сообщением "Книга обновлена с учетом изменений, внесенных другими пользователями" AppActivate "Microsoft Excel" If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
Application.OnTime Now + TimeValue("00:00:05"), "checkWindows" 'проверка окон каждые 5 секунд End Sub
Gustav, интересно бесконечный цикл не получается вставил в процедуру старт сохранить книгу но макрос останавливается на ней когда это окно появляется, после ручных манипуляций закрыв его, макрос продолжается в буфере появляется ошибка 1004 (но уже далее макрос бесполезен все произошло_
[vba]
Код
On Error Resume Next Workbooks(1).Save 'ищется окно о конфликте доступа AppActivate "Возник конфликт доступа"
[/vba]
Gustav, интересно бесконечный цикл не получается вставил в процедуру старт сохранить книгу но макрос останавливается на ней когда это окно появляется, после ручных манипуляций закрыв его, макрос продолжается в буфере появляется ошибка 1004 (но уже далее макрос бесполезен все произошло_
[vba]
Код
On Error Resume Next Workbooks(1).Save 'ищется окно о конфликте доступа AppActivate "Возник конфликт доступа"
интересно бесконечный цикл не получается вставил в процедуру
AlexMen, ай-ай! Вы меня не совсем поняли, даже совсем не поняли... Моя процедура - в законченном виде, из нее не надо выдергивать отдельные операторы и пытаться пристроить куда-то в ваш макрос, смешивая всё "в одном флаконе". Ее надо просто запустить в том виде, как я привел, в ДРУГОМ ЭКЗЕМПЛЯРЕ Excel. И она там сама будет тихонько крутиться... А вы тем временем работает в ПЕРВОМ ЭКЗЕМПЛЯРЕ Excel - редактируете книгу вручную или макросом.
Если не очень понятно про "другой экземпляр" (можно погуглить в принципе), то давайте просто возьмем другое приложение - допустим, Word. Моя процедура там тоже заработает. Т.е. открывайте новый документ Word, идите в нём в редактор Visual Basic, копируйте туда мою процедуру и запускайте по F5.
Далее запускаете Excel самым обычным образом, открываете в нём вашу рабочую книгу и делаете что вам надо. Если появится окно "Возник конфликт доступа", то не закрывайте его, а подождите в пределах 5 секунд (понятно почему?) и оно само закроется. Далее в пределах 5 секунд закроется и сообщение "Книга обновлена...".
Можно даже провести такой эксперимент для наглядности. В Excel запустите не свою книгу, а простой макрос и наблюдайте как возникнут и САМИ ЗАКРОЮТСЯ с интервалом 5 секунд (понятно почему?) все 10 "приветов": [vba]
Код
Sub test() Dim i For i = 1 To 10 MsgBox "Привет-" & i, , "Microsoft Excel" Next End Sub
[/vba] Таким образом, картина получается следующая: у нас привычно трудится Excel, а "надсмотрщик" Word по мере необходимости шлёт ему нужные команды.
интересно бесконечный цикл не получается вставил в процедуру
AlexMen, ай-ай! Вы меня не совсем поняли, даже совсем не поняли... Моя процедура - в законченном виде, из нее не надо выдергивать отдельные операторы и пытаться пристроить куда-то в ваш макрос, смешивая всё "в одном флаконе". Ее надо просто запустить в том виде, как я привел, в ДРУГОМ ЭКЗЕМПЛЯРЕ Excel. И она там сама будет тихонько крутиться... А вы тем временем работает в ПЕРВОМ ЭКЗЕМПЛЯРЕ Excel - редактируете книгу вручную или макросом.
Если не очень понятно про "другой экземпляр" (можно погуглить в принципе), то давайте просто возьмем другое приложение - допустим, Word. Моя процедура там тоже заработает. Т.е. открывайте новый документ Word, идите в нём в редактор Visual Basic, копируйте туда мою процедуру и запускайте по F5.
Далее запускаете Excel самым обычным образом, открываете в нём вашу рабочую книгу и делаете что вам надо. Если появится окно "Возник конфликт доступа", то не закрывайте его, а подождите в пределах 5 секунд (понятно почему?) и оно само закроется. Далее в пределах 5 секунд закроется и сообщение "Книга обновлена...".
Можно даже провести такой эксперимент для наглядности. В Excel запустите не свою книгу, а простой макрос и наблюдайте как возникнут и САМИ ЗАКРОЮТСЯ с интервалом 5 секунд (понятно почему?) все 10 "приветов": [vba]
Код
Sub test() Dim i For i = 1 To 10 MsgBox "Привет-" & i, , "Microsoft Excel" Next End Sub
[/vba] Таким образом, картина получается следующая: у нас привычно трудится Excel, а "надсмотрщик" Word по мере необходимости шлёт ему нужные команды.Gustav
If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
[/vba] как я понял тут и проблема с энтером, мол если нет ошибки то Энтер жмет , утром попробую с вашем примером поколдовать, хоть есть направление для копания.
If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
[/vba] как я понял тут и проблема с энтером, мол если нет ошибки то Энтер жмет , утром попробую с вашем примером поколдовать, хоть есть направление для копания.AlexMen
lebensvoll отпишите на почту, а то меня _Boroda_ забанил, я Вам функцию сброшу
1. не закрывает ваши окна 2. неправильное если(всегда жмет энтер)
AlexMen, может у вас основное окно Excel называется "Microsoft Excel"? И именно оно принимает на себя нажатия Enter? У меня-то в версии 13 названия окон Excel начинаются с имени книги...
В любом случае, для чистоты эксперимента можно строки "Microsoft Excel" в процедурах checkWindows и test превратить во что-нибудь более редкое и уникальное, например, "Мой Excel", после чего повторить все мероприятия. Попробуете?
1. не закрывает ваши окна 2. неправильное если(всегда жмет энтер)
AlexMen, может у вас основное окно Excel называется "Microsoft Excel"? И именно оно принимает на себя нажатия Enter? У меня-то в версии 13 названия окон Excel начинаются с имени книги...
В любом случае, для чистоты эксперимента можно строки "Microsoft Excel" в процедурах checkWindows и test превратить во что-нибудь более редкое и уникальное, например, "Мой Excel", после чего повторить все мероприятия. Попробуете?Gustav
По тестил, вывод один код останавливается при появление Любого окна(диологового) вот таким макаром сделал макрос и запусти (добавил счетчик циклов) и простыми наблюдениями понятно что макрос останавливается
[vba]
Код
Sub checkWindows() On Error Resume Next AppActivate "12345" If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
Application.OnTime Now + TimeValue("00:00:05"), "checkWindows" 'проверка окон каждые 5 секунд
End Sub
Sub test() Dim i For i = 1 To 10 MsgBox "Привет-" & i, , "12345" Next End Sub
[/vba]
По тестил, вывод один код останавливается при появление Любого окна(диологового) вот таким макаром сделал макрос и запусти (добавил счетчик циклов) и простыми наблюдениями понятно что макрос останавливается
[vba]
Код
Sub checkWindows() On Error Resume Next AppActivate "12345" If Err Then Err.Clear Else SendKeys "{ENTER}" 'нажимается ОК End If
простыми наблюдениями понятно что макрос останавливается
AlexMen, Вы можете выполнить мои рекомендации из сообщения №9 буквально-дословно ?
А именно: запустить checkWindows() в ВОРДЕ (! не в Excel, а в WORD !), а потом в EXCEL запустить процедуру test. Обе процедуры - в моей изначальной редакции, без ваших дополнительных операторов - т.е. из сообщений №7 и №9. Но, разумеется, заменив строки "Microsoft Excel" на "12345". А?
P.S. Коллеги, кто еще читает топик, если в не в напряг, подсобите с экспериментом - выполните у себя несложное упражнение из сообщения № 9 ? Всем откликнувшимся - спасибо!
простыми наблюдениями понятно что макрос останавливается
AlexMen, Вы можете выполнить мои рекомендации из сообщения №9 буквально-дословно ?
А именно: запустить checkWindows() в ВОРДЕ (! не в Excel, а в WORD !), а потом в EXCEL запустить процедуру test. Обе процедуры - в моей изначальной редакции, без ваших дополнительных операторов - т.е. из сообщений №7 и №9. Но, разумеется, заменив строки "Microsoft Excel" на "12345". А?
P.S. Коллеги, кто еще читает топик, если в не в напряг, подсобите с экспериментом - выполните у себя несложное упражнение из сообщения № 9 ? Всем откликнувшимся - спасибо!Gustav
Dim objExl, wb Private Sub Workbook_Open() Set myVB = ThisWorkbook Set objExl = CreateObject("Excel.Application") Set wb = objExl.Workbooks.Open(ThisWorkbook.Path & "\" & "test-checkWin.xlsm") myVB.Activate End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next objExl.Quit End Sub
[/vba]там же макрос test (на кнопку повесила) В книге test-checkWin.xlsm макрос Константина (Gustav) checkWindows Открываем книгу test-book.xlsm, нажимаем кнопку "тест" UPD макрос checkWindows - сократила (1 раз enter нажимает и усё), т.к. сейчас нет возможности проверить работу файла в общем доступе. Естественно, для работы вместо короткой версии макроса нужно будет вставить полную пост №7
Dim objExl, wb Private Sub Workbook_Open() Set myVB = ThisWorkbook Set objExl = CreateObject("Excel.Application") Set wb = objExl.Workbooks.Open(ThisWorkbook.Path & "\" & "test-checkWin.xlsm") myVB.Activate End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next objExl.Quit End Sub
[/vba]там же макрос test (на кнопку повесила) В книге test-checkWin.xlsm макрос Константина (Gustav) checkWindows Открываем книгу test-book.xlsm, нажимаем кнопку "тест" UPD макрос checkWindows - сократила (1 раз enter нажимает и усё), т.к. сейчас нет возможности проверить работу файла в общем доступе. Естественно, для работы вместо короткой версии макроса нужно будет вставить полную пост №7Manyasha
Ай, Manyasha, круто замесила! Большое спасибо за ассистирование при проведении "лабораторной работы"! Правда, думаю, "ученику" надо всё-таки самостоятельно и через Ворд попробовать. Тоже! Для исчерпывающего, так сказать, осознания.
Ай, Manyasha, круто замесила! Большое спасибо за ассистирование при проведении "лабораторной работы"! Правда, думаю, "ученику" надо всё-таки самостоятельно и через Ворд попробовать. Тоже! Для исчерпывающего, так сказать, осознания.Gustav
Gustav, из ворда работает. как вариант возможно но ради этого держать ворд запущенным... да и в последствие увязать результат мол если окно появилось то сделать тот то.(в моем случае данные находящиеся в массиве макроса который вызывает иногда это окно)
основа этого кода это AppActivate "12345" которая при отсутствие окна выдает ту или иную ошибку которая в дальнейшем обрабатывается проблема в том что если этот вставить в основной макрос то он останавливается в момент появление окна.
Gustav, из ворда работает. как вариант возможно но ради этого держать ворд запущенным... да и в последствие увязать результат мол если окно появилось то сделать тот то.(в моем случае данные находящиеся в массиве макроса который вызывает иногда это окно)
основа этого кода это AppActivate "12345" которая при отсутствие окна выдает ту или иную ошибку которая в дальнейшем обрабатывается проблема в том что если этот вставить в основной макрос то он останавливается в момент появление окна.AlexMen
lebensvoll отпишите на почту, а то меня _Boroda_ забанил, я Вам функцию сброшу
из ворда работает. как вариант возможно но ради этого держать ворд запущенным...
Ворд был предложен как НЕЧТО, в чём возможен без больших усилий запуск макроса, работающего независимо от основного (а-ля резидентная программа). Сделано это было исключительно в учебных целях - потому что вы не смогли/не захотели запускать второй независимый экземпляр Excel, изначально предлагавшийся.
А что-то "запущенным" все равно ведь придется держать - видимый Word или невидимый второй Excel или вообще Access - так какая разница?
из ворда работает. как вариант возможно но ради этого держать ворд запущенным...
Ворд был предложен как НЕЧТО, в чём возможен без больших усилий запуск макроса, работающего независимо от основного (а-ля резидентная программа). Сделано это было исключительно в учебных целях - потому что вы не смогли/не захотели запускать второй независимый экземпляр Excel, изначально предлагавшийся.
А что-то "запущенным" все равно ведь придется держать - видимый Word или невидимый второй Excel или вообще Access - так какая разница? Gustav