Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Word - Вычислить и остановить закрытие документа / 25 сообщений из 37, страница 1 из 2
07.05.2016, 21:51
    #39231378
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Есть документ, в котором перед его закрытием запускается форма из подключенного шаблона.
После того как форма отрабатывает свои действия/взаимодествия с юзером в документе сохраняются все последние изменения и он закрывается.
Все бы ничего, но на форме имеется кнопка "Отмена", чтобы пользователь мог закрыть эту форму и продолжить что-то изменять в документе, если это ему необходимо.
Как вычислить и остановить процесс выполнения дальнейшего кода, а именно закрытие документа, если на форме юзер выбрал именно эту кнопку "Отмена" или нажал крестик для закрытия формы?
...
Рейтинг: 0 / 0
07.05.2016, 22:43
    #39231392
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Как отслеживается закрытие документа? У Application.DocumentBeforeClose есть параметр Cancel.
...
Рейтинг: 0 / 0
08.05.2016, 13:04
    #39231490
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.ProКак отслеживается закрытие документа? У Application.DocumentBeforeClose есть параметр Cancel.
В документе "А" я запускаю форму, которая находится в другом подключенном шаблоне:
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub Document_Close()

Application.Run "MyProject.MyModule.MyProcedure" '- запуск формы из шаблона
Далее выполняется другой код и потом закрытие документа...

End Sub


По идее мне нужно как то отследить каким образом была закрыта форма из шаблона и сделать в док."А" условие типа:
если на форме была нажата кнопка "Отмена" или крестик в углу, то документ не закрывать.
Но как это сделать, если форма запускается из другого шаблона и даже если кнопка "Отмена" или крестик в углу отрабатывают свое как надо, то после того как она закрывается, код в процедуре док."А" продолжает выполнять далее свой код.
Я не понимаю как сделать это условие?
...
Рейтинг: 0 / 0
09.05.2016, 17:34
    #39231887
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Неужели без вариантов вычислить какая кнопка на форме была нажата юзером и передать значение из шаблона в другой файл сторонний, чтобы сделать условие?
...
Рейтинг: 0 / 0
10.05.2016, 11:35
    #39232204
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Попробуйте запустить MyProcedure с параметром и передать ответ через этот параметр
...
Рейтинг: 0 / 0
14.05.2016, 16:38
    #39235778
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.ProПопробуйте запустить MyProcedure с параметром и передать ответ через этот параметр
Можете дать пример?

Не уверена, что моя идея хорошая, но сейчас пытаюсь сделать такой вариант, когда получаю соответствующий нужный мне параметр, запускаю теперь уже Application.Run из шаблона обратно в документ, но не получается реализовать, потому что формат документа без хранения модулей в нем. Непонятно как запускать Application.Run для процедур, которые находятся в самом объекте документа?
А согласно справке Application.Run Method:
Application.Run "Normal. Module1 .MAIN"
Application.Run "MyProject. MyModule .MyProcedure"
Application.Run "'My Document.doc'! ThisModule .ThisProcedure"

Другого варианта я больше не нахожу. Хотя хотелось бы сделать, чтобы можно было при запуске Run сразу возвращать нужный вычисленный параметр, а так получается хождение с вычислением и переносом 1 разъединого параметра из документа в проект шаблона + из шаблона в документ, затем возврат обратно в шаблон, чтобы вернуться в документ.
...
Рейтинг: 0 / 0
14.05.2016, 16:48
    #39235779
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23А согласно справке Application.Run Method:А согласно справке:
The Run method returns whatever the called macro returns

Вы пробовали возвращать какое-то значение? Не получилось?
...
Рейтинг: 0 / 0
14.05.2016, 18:57
    #39235814
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.Pronataxa23А согласно справке Application.Run Method:А согласно справке:
The Run method returns whatever the called macro returns

Вы пробовали возвращать какое-то значение? Не получилось?
Если я делаю в процедуре самого документа:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub Document_Close()
Dim GetFormResult As Boolean
  GetFormResult = Application.Run(МойПроект & ".Модуль.Процедура")
  далее условие для GetFormResult... 'всегда возвращается False из шаблона
End Sub


всегда возвращается False даже, когда в процедуре шаблона вычислено True.
Что я делаю не так в данном случае?
______________________
А вот, если пытаться пробовать мой вариант, т.е. из шаблона, вычислив значение параметра, запустить обратно процедуру Run в документ, то здесь я не могу понять как указать параметр "MacroName" для Run, иначе возникает ошибка 438.
...
Рейтинг: 0 / 0
14.05.2016, 19:21
    #39235817
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23
Код: vbnet
1.
всегда возвращается False из шаблона

а как выглядит процедура?
...
Рейтинг: 0 / 0
14.05.2016, 20:57
    #39235843
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.Pronataxa23
Код: vbnet
1.
всегда возвращается False из шаблона

а как выглядит процедура?
процедура в шаблоне выглядит так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Sub Контроль()
  Dim strDocName As String
  Dim objWordDoc As Word.Document

  strDocName = ActiveDocument.Name
  Set objWordDoc = Documents.Item(strDocName)
  objWordDoc.Activate
  ...
  frmMonitoring.Show
  If GetResult = True Then 'если была нажата кнопка "Отмена" или "Х" на форме
'Application.Run - если делать запуск на процедуру в документе,
'но не получается запускать - не понимаю как указать строку "MacroName" в документе,
'если он не поддерживает хранение макросов
    Set objWordDoc = Nothing
    Exit Sub
  End If
  If objWordDoc.Saved = False Then
    objWordDoc.Save
  End If

  Set objWordDoc = Nothing
End Sub
...
Рейтинг: 0 / 0
14.05.2016, 21:36
    #39235858
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23всегда возвращается False даже, когда в процедуре шаблона вычислено True.nataxa23процедура в шаблоне выглядит так:
Код: vbnet
1.
Sub Контроль()

и как, простите, эта процедура возвращает True и где оно вычислено?
...
Рейтинг: 0 / 0
14.05.2016, 21:36
    #39235859
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23Что я делаю не так в данном случае?Ваша процедура должна быть как минимум function, чтобы что-то возвращать.
...
Рейтинг: 0 / 0
14.05.2016, 22:18
    #39235871
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.Pronataxa23Что я делаю не так в данном случае?Ваша процедура должна быть как минимум function, чтобы что-то возвращать.
Из файла я запускаю процедуру "Sub Контроль()", которая в свою очередь запускает форму. Если юзер нажимает кнопку "Отмена" или "Х" на форме, функция GetResult возвращает мне True.
В процедуре вот на этом условии, если оно срабатывает как True, мне нужно дальше как то передать параметр в документ, который я не могу никак передать:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
  If GetResult = True Then 'если была нажата кнопка "Отмена" или "Х" на форме
'Application.Run - если делать запуск на процедуру в документе,
'но не получается запускать - не понимаю как указать строку "MacroName" в документе,
'если он не поддерживает хранение макросов
    Set objWordDoc = Nothing
    Exit Sub
  End If


или я что то упускаю, только не могу понять что именно и где именно?
...
Рейтинг: 0 / 0
14.05.2016, 22:28
    #39235872
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23или я что то упускаю
Код: vbnet
1.
2.
GetFormResult = Application.Run(МойПроект & ".Модуль.Процедура")
далее условие для GetFormResult


Откуда в GetFormResult возьмется True? Ее должна возвратить процедура "Процедура", которую надо оформить в виде функции
...
Рейтинг: 0 / 0
14.05.2016, 22:45
    #39235878
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Потому я и говорю, что не понимаю как ее вернуть от туда - из шаблона.
И еще, если в шаблоне я процедуру переделываю на функцию, то в коде документа тогда возникает ошибка: -2147352573.
...
Рейтинг: 0 / 0
14.05.2016, 23:00
    #39235881
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23в коде документа тогда возникает ошибка: -2147352573.Сама по себе переделка Sub на Function не должна приводить ни к каким ошибкам. Код ошибки мне тоже ничего не говорит - думаете мы наизусть знаем все коды ошибок? Текст давайте.
...
Рейтинг: 0 / 0
14.05.2016, 23:05
    #39235882
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Впрочем, возможно Application.Run действительно не может вызывать функцию....
Runs a macro or calls a function. This can be used to run a macro written in Visual Basic or the Microsoft Excel macro language, or to run a function in a DLL or XLL. не очень ясно
...
Рейтинг: 0 / 0
14.05.2016, 23:19
    #39235884
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Специально проверил - все нормально работает.
Не знаю, что вы там у себя наворотили.
Код: vbnet
1.
2.
3.
4.
5.
Public Function t()

t = "yy"

End Function

Код: vbnet
1.
2.
3.
4.
5.
Public Sub g()

Debug.Print Application.Run("Книга2!Module1.t")

End Sub
...
Рейтинг: 0 / 0
15.05.2016, 17:39
    #39236049
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.Pro,
все разобралась с передачей параметра в документ, спасибо Вам большое.
Осталось теперь понять причину, по которой в процедуре "Private Sub Document_Close()" при моем условии почему то команда End не выполняется, т.е. когда документ закрывать не нужно, он все равно закрывается?
В это я как то не предвидела.
...
Рейтинг: 0 / 0
15.05.2016, 22:34
    #39236168
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
А с чего вы решили, что End должно отменить закрытие документа?
Как я писал с самого начала - нужно обрабатывать событие Application.DocumentBeforeClose, в котором присваивать Cancel=True, если требуется отменить закрытие документа
...
Рейтинг: 0 / 0
19.05.2016, 21:16
    #39239547
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.ProКак я писал с самого начала - нужно обрабатывать событие Application.DocumentBeforeClose, в котором присваивать Cancel=True, если требуется отменить закрытие документа
А Вы можете дать пример как его вызвать?
...
Рейтинг: 0 / 0
19.05.2016, 22:24
    #39239580
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Нужно добавить класс и в нем написать
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Public WithEvents App As Application

Private Sub App_DocumentBeforeClose(ByVal Doc As Document, Cancel As Boolean)

Cancel = True

End Sub

Но перед использованием переменную App нужно где-то инициализировать, например при открытии документа
Код: vbnet
1.
Set App = Application
...
Рейтинг: 0 / 0
20.05.2016, 22:34
    #39240471
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.ProНо перед использованием переменную App нужно где-то инициализировать, например при открытии документа
Код: vbnet
1.
Set App = Application


Класс добавлен и согласно Вашему примеру в процедуру Document_Close добавлена так же эта строка, но дальше то что? Я понять не могу никак???
Мне же надо вызвать это событие, я не понимаю как?
...
Рейтинг: 0 / 0
20.05.2016, 23:04
    #39240484
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
nataxa23Мне же надо вызвать это событие, я не понимаю как?Так оно само вызывается при закрытии любого документа

Shocker.Proпеременную App нужно где-то инициализировать, например при открытии документаnataxa23в процедуру Document_Close добавлена так же эта строкаDocument_Close вызывается после App_DocumentBeforeClose, так что туда добавлять бесполезно, нужно раньше, как я сказал, например при открытии документа.
...
Рейтинг: 0 / 0
21.05.2016, 17:53
    #39240714
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - Вычислить и остановить закрытие документа
Shocker.Pronataxa23Мне же надо вызвать это событие, я не понимаю как?Так оно само вызывается при закрытии любого документа

Shocker.Proпеременную App нужно где-то инициализировать, например при открытии документаnataxa23в процедуру Document_Close добавлена так же эта строкаDocument_Close вызывается после App_DocumentBeforeClose, так что туда добавлять бесполезно, нужно раньше, как я сказал, например при открытии документа.
Хорошо, перенесла строку в процедуру:
Код: vbnet
1.
2.
3.
Private Sub Document_Open()
  Set App = Application
End Sub


Открываю документ нажимаю например Ctrl+W, чтобы его закрыть - документ как закрывался, так и продолжает закрываться.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Word - Вычислить и остановить закрытие документа / 25 сообщений из 37, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]