Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Word - проверка опций на курсоре / 15 сообщений из 15, страница 1 из 1
14.02.2015, 22:15
    #38879912
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Уважаемые форумчане, хочу на клавишу "Esc" сделать и повесить свою процедуру на закрытие документа.
Как в начале устроить проверку, что на курсоре весит какая-либо опция в готовности применить ее и сделать в начале отмену ее действия, а уже при повторном нажатии по "Esc", если ничего не мешает, тогда выполнить закрытие документа?
Например "Цвет выделения текста" или "Формат по абзацу", что то типа того.
...
Рейтинг: 0 / 0
15.02.2015, 01:23
    #38879966
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Нет проблемы, если я правильно понял. Esc используется для закрытия текущего диалога, выпадающего списка и т.п. Если такой элемент активен, он перехватит Esc. А ваша процедура выполнится по Esc, только если курсор будет "в документе".

А как повесить что-либо на Esc - нашли? ;)
...
Рейтинг: 0 / 0
15.02.2015, 07:12
    #38879994
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Казанский,
>как повесить что-либо на Esc - нашли? ;)
интересно как? может, что новое узнаю....
...
Рейтинг: 0 / 0
15.02.2015, 15:20
    #38880133
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Ничего особо хитрого нет, запиши в макрос назначение сочетания клавиш какому-нибудь макросу, потом замени аргумент:
Код: vbnet
1.
2.
3.
KeyCode:=BuildKeyCode(wdKeyEsc)
'или просто
KeyCode:=wdKeyEsc
...
Рейтинг: 0 / 0
15.02.2015, 15:42
    #38880152
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Казанский, не въехал, где этот аргумент меняется?
...
Рейтинг: 0 / 0
15.02.2015, 17:45
    #38880197
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Как повесить свою процедуру на горячую клавишу Esc я и так знаю, я другое найти или вычислить не могу.
Попытаюсь визуально описать, что мне нужно.
На скриншоте, если мышкой юзером выбирается какая то... не знаю как эту хрень назвать, то курсор мышки видоизменяется под это действие и находится в ожидании его применения относительно обработки/оформления текста.
У майкрософта по умолчанию эта фигня отменяется по нажатию на клавишу Esc, т.е. если воспользоваться например мастером для записи макросов, то команда будет такая: "Selection.EscapeKey", но мне удобно использовать Esc на закрытие документа. Я никак не могу вычислить что это за действие такое, чтобы к нему применить свое вот такое условие:
- если на выбрано это неизвестное действие,
- тогда сделать его отмену
- иначе закрыть документ.
...
Рейтинг: 0 / 0
26.09.2015, 21:23
    #39062111
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
В продолжение темы закрытие док.ворд по клавише "ESC".
Ребят помогите вот с каким моментом. Не могу понять, что держит ворд при переименовании папки (при необходимости) после выполнения моей процедуры, когда выполняется «Run», если пользователь внес изменения в док., нажал "Esc" и выбрал папку для пересохранения?
Помогите со второй частью кода пожалуйста.
Код: vbnet
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.
Dim objWordApl As New Word.Application
Dim objWordDoc As Word.Document
Dim strDocName As String
Dim intMsgBx As Integer 'вариант значения при отклике юзера на сообщение MsgBox

If wdKeyEsc Then
  strDocName = ActiveDocument.Name
  Set objWordDoc = Documents.Item(strDocName)
'Проверка, если юзер сделал изменения
  If objWordDoc.Saved = True Then 'юзер ничего не изменял
    intMsgBx = MsgBox("Закрыть документ", vbQuestion + vbYesNoCancel, "Info")
'Вычисляем, что конкретно нажал юзер?
    If intMsgBx = 2 Then 'если юзер нажал "Отмена"
      Exit Sub
    ElseIf intMsgBx = 6 Then 'если юзер нажал "Да"
      objWordDoc.Close
    ElseIf intMsgBx = 7 Then 'если юзер нажал "Нет"
      Exit Sub
    End If
  Else 'юзер внес изменения - ???здесь начинается проблема, если нужно потом переименовать папку
    Set objWordApl = Word.Application
    objWordApl.Run "DocClose"
  End If
End If
strDocName = ""
Set objWordDoc = Nothing
Set objWordApl = Nothing
...
Рейтинг: 0 / 0
27.09.2015, 13:10
    #39062355
катастрофа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
КазанскийНет проблемы, если я правильно понял. Esc используется для закрытия текущего диалога, выпадающего списка и т.п. Если такой элемент активен, он перехватит Esc. А ваша процедура выполнится по Esc, только если курсор будет "в документе".

А как повесить что-либо на Esc - нашли? ;)
здравствуйте, что-то я так и не понял как это делается? макрорекордер же не позволит навешать на эту кнопку что-то, нужно сочетание клавиш....
...
Рейтинг: 0 / 0
27.09.2015, 16:19
    #39062460
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
катастрофаздравствуйте, что-то я так и не понял как это делается? макрорекордер же не позволит навешать на эту кнопку что-то, нужно сочетание клавиш....

Повесить на свою процедуру горячую клашу/сочетание гор.клав. - это не проблема:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub Esc()
'Закрыть документ, но не оболочку MS Word
'Для активации макроса, прогнать его в VBA через F5 или пошагово через F8
'CustomizationContext = NormalTemplate 'Шаблон пользователя
CustomizationContext = ActiveDocument.AttachedTemplate
  KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyEsc), _
    KeyCategory:=wdKeyCategoryCommand, _
    Command:="Имя Вашей процедуры" '"DocClose"
ActiveDocument.AttachedTemplate.Save
End Sub


Меня интересует мой вопрос выше, кто-нибудь может мне помочь с вопросом. Я не могу понять что остается в процессе после отработки процедуры на этапе "objWordApl.Run "DocClose"?
Что то, что не дает потом возможность переименовать папку и приходится закрывать оболочку Word.
...
Рейтинг: 0 / 0
28.09.2015, 15:43
    #39063228
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
nataxa23,

текущая активная директория

можно попробовать сменить её командой chdir ".." после закрытия файла
...
Рейтинг: 0 / 0
28.09.2015, 15:49
    #39063235
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
или вот вариант .

Мне кажется что этот вариант более правильный.

Но как говорится "доверяй, но проверяй" :)
...
Рейтинг: 0 / 0
28.09.2015, 22:16
    #39063633
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Игорь Горбоносили вот вариант .
Мне кажется что этот вариант более правильный.
Но как говорится "доверяй, но проверяй" :)
Я с самого начала пробовала этот вариант
Код: vbnet
1.
Options.DefaultFilePath(wdDocumentsPath)


Но это не работает. После того как файл закрывается папку переименовать все равно не получается. Винда возмущается, а анлокер предлагает разблокировать WINWORD.EXE

chdir та же песня.

Вообще не понимаю какой процесс остается держать после отработки приведенного моего макроса выше?
...
Рейтинг: 0 / 0
29.09.2015, 11:01
    #39063933
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
nataxa23,

обычная запись макроса подсказывает решение.
Я в проводнике создал папку "1", а в ней папку "3" и открыл ворд, в новом документе ткнул несколько клавиш и включив запись макроса сохранил файл в папке "3". Потом открыл записанный макрос и первой строкой была искомая функция. я добавил её в конец макроса и выполнил его. И все сразу переименовалось.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub Макрос6()
'
' Макрос6 Макрос
'
'
    ChangeFileOpenDirectory "C:\1\3\"
    ActiveDocument.SaveAs FileName:="srthwh.docx", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
        ActiveDocument.Close False
    ChangeFileOpenDirectory "C:\1\"
        
End Sub
...
Рейтинг: 0 / 0
29.09.2015, 13:36
    #39064146
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
nataxa23Вообще не понимаю какой процесс остается держать после отработки приведенного моего макроса выше?
На виндовсе, любая запущенная программа блокирует свой файл и путь к нему от изменений.
Так-же блокируются файлы и папки открываемые в программах типа ворд, ексель.
Когда файл закрывается, то освобождается блокировка самого файла, а путь к этому файлу может продолжаться блокироваться.
В данном случае срабатывает плюшка офиса(на мой взгляд достаточно удобная, сам такое делаю в своих программах) - облегчать страдания пользователей и показывать ему сразу последнюю использовавшуюся папку при попытке показать диалог открытия или сохранения. Поэтому unlocker и "наговаривает" на ворд :)
Согласен, в некоторых случаях это жутко неудобно, но в твоем случае как раз все решается леХко.
...
Рейтинг: 0 / 0
29.09.2015, 21:47
    #39064688
nataxa23
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Word - проверка опций на курсоре
Игорь Горбоносnataxa23Вообще не понимаю какой процесс остается держать после отработки приведенного моего макроса выше?
На виндовсе, любая запущенная программа блокирует свой файл и путь к нему от изменений.
Так-же блокируются файлы и папки открываемые в программах типа ворд, ексель.
Когда файл закрывается, то освобождается блокировка самого файла, а путь к этому файлу может продолжаться блокироваться.
В данном случае срабатывает плюшка офиса(на мой взгляд достаточно удобная, сам такое делаю в своих программах) - облегчать страдания пользователей и показывать ему сразу последнюю использовавшуюся папку при попытке показать диалог открытия или сохранения. Поэтому unlocker и "наговаривает" на ворд :)
Согласен, в некоторых случаях это жутко неудобно, но в твоем случае как раз все решается леХко.
Разобралась, все зделала, работает. Спасибо за помощь.:)
Прописала строку:
Код: vbnet
1.
ChDir Environ("HOMEDRIVE") & Environ("HOMEPATH") & "\Рабочий стол\"


Я с самого начала подозревала это. Просто одного чего то не пойму, почему с ChDir у меня в самом начале не вышло почему то...?!? Правда, я подозреваю, что просто тупо могла в торопях где-нить какую-нить орфо незначительную допустить, ну это как вариант...
Делала просто уже в ночное время суток и спала в одном ботинке.:)
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Word - проверка опций на курсоре / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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