Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2013, 09:46   #1
HenryO
Пользователь
 
Регистрация: 10.04.2013
Сообщений: 21
По умолчанию VBA Программный ответ на вопрос диалогового окна

Друзья,
мой макрос открывает файл-doc и дальше идет вставка таблицы из excel.
Проблема в том, что в файле-doc есть Связь с таблицей excel.
При открытии .doc, выходит окно с вопросом об обновлении связи. Мне нужно до начала следующей процедуры нажать "Да, обновить связь".
Как мне это сделать (подойдет 2 след. варианта):
1)могу я вручную нажать на "Да", тогда нужно, чтоб следующая процедура не запускалась, пока я не нажму
2)либо есть какой-то способ прописать, чтоб программа за меня сама нажала на "Да".
Код:
Sub ГенерацияОтчетов()
Dim oShell As Object

Set oShell = CreateObject("Shell.Application")
oShell.shellexecute ThisWorkbook.Path & "\Шаблон отчетов.docm"

'ЗДЕСЬ ВСПЛЫВАЕТ ОКОШКО!

Application.Wait (Now + TimeValue("0:00:05"))
GetObject(, "Word.Application").Run "ФормированиеОтчетов.ВставкаОтчетаИзExcel"

End Sub
HenryO вне форума Ответить с цитированием
Старый 21.05.2013, 10:00   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

открывайте ваш документ через объект "word.application", где можно предварительно отключить сообщения
Код:
Set Wa =  = CreateObject("Word.Application")
Wa.DisplayAlerts = wdAlertsNone
Set Wd = Wa.Open ThisWorkbook.Path & "\Шаблон отчетов.docm"
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 21.05.2013, 10:03   #3
HenryO
Пользователь
 
Регистрация: 10.04.2013
Сообщений: 21
По умолчанию

А если я отключу сообщение, связь обновится? Нужно, чтоб связь обновлялась.
HenryO вне форума Ответить с цитированием
Старый 21.05.2013, 11:17   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

это
Wa.DisplayAlerts = wdAlertsNone
отключит появление окон-предупреждений
если не обновляется связь - значит где-то потерялся связанный обьект, приложение само не может "разрулить" ситуацию спрашивает у пользователя обновить связь, следующий вопрос будет "а где этот обьект находится".
связь не установилась, Вы не вступили в конструктивный диалог с приложением (а при отключенных сообщениях, даже не узнаете об этом прискорбном событии и будете лишены возможности установить связь), связь не будет установлена в данном сеансе работы.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.05.2013, 11:49   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Ну так добавьте:

Код:
Wd.Fields.Update
p.s. в хелпе сноска на 2010 и 2013 офисы, но в предыдущих версиях тоже должно быть обновление связей...
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 21.05.2013, 16:16   #6
HenryO
Пользователь
 
Регистрация: 10.04.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
открывайте ваш документ через объект "word.application", где можно предварительно отключить сообщения
Код:
Set Wa =  = CreateObject("Word.Application")
Wa.DisplayAlerts = wdAlertsNone
Set Wd = Wa.Open ThisWorkbook.Path & "\Шаблон отчетов.docm"
А вы сами тестировали этот код?
У след.строчки
Код:
Set Wd = Wa.Open ThisWorkbook.Path & "\Шаблон отчетов.docm"
без круглых скобок - синтаксическая ошибка,
с круглыми скобками - объект не поддерживает данный метод
HenryO вне форума Ответить с цитированием
Старый 21.05.2013, 16:47   #7
HenryO
Пользователь
 
Регистрация: 10.04.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это
Wa.DisplayAlerts = wdAlertsNone
отключит появление окон-предупреждений
если не обновляется связь - значит где-то потерялся связанный обьект, приложение само не может "разрулить" ситуацию спрашивает у пользователя обновить связь, следующий вопрос будет "а где этот обьект находится".
связь не установилась, Вы не вступили в конструктивный диалог с приложением (а при отключенных сообщениях, даже не узнаете об этом прискорбном событии и будете лишены возможности установить связь), связь не будет установлена в данном сеансе работы.
Не совсем так у меня. Я запуская ворд как раз из-под источника. Просто хочется программно нажать на "Да, обновить связь" или какой-нибудь способ, который позволит не переходить к следующей строчке, пока не произведу действие вручную, т.е. вручную нажму на "Да, обновить".

Про отключение сообщений даже речи не стоит.
HenryO вне форума Ответить с цитированием
Старый 21.05.2013, 16:47   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
А вы сами тестировали этот код?
это вместо спасибо пытаюсь разобраться?
Цитата:
с круглыми скобками - объект не поддерживает данный метод
это смотря где в данном выражении скобки открыть-закрыть
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.05.2013, 16:50   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

программно нажать "Да" - читайте SendKeys
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.05.2013, 06:36   #10
HenryO
Пользователь
 
Регистрация: 10.04.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
это вместо спасибо пытаюсь разобраться?
это смотря где в данном выражении скобки открыть-закрыть
Интонация у меня была вопросительная и крайне доброжелательная, не подумайте ничего. Я благодарен за любой совет.

Код:
Set Wd = Wa.Open ThisWorkbook.Path & "\Шаблон отчетов.docm"
В вашем написании выдает синтаксическую ошибку. Поэтому у вас и хочу уточнить, запустился ли он у вас в таком виде?

Код:
Set Wd = Wa.Open (ThisWorkbook.Path & "\Шаблон отчетов.docm")
Вот так уже не выдает синтаксическую ошибку, но зато выдает, что Wa не поддерживает данный метод Open.
HenryO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA excel не удается закрыть и сохранить книгу без возникновения диалогового окна Tvilla Помощь студентам 2 28.06.2012 11:01
Размер диалогового окна Samir_ Win Api 0 15.03.2012 11:30
Как прописать программный ответ на диалоговые окна? Squarded Microsoft Office Excel 11 27.07.2011 20:04
У диалогового окна пропадает фон ssashas Помощь студентам 0 25.04.2010 21:22
Вызов диалогового окна Sapsan Общие вопросы C/C++ 6 30.03.2009 23:03