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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2016, 08:36   #11
olegspectr
 
Регистрация: 11.08.2016
Сообщений: 9
По умолчанию

Спасибо за совет по макросу, но он к сожалению не работает. Нужно отлаживать. Как будет время посмотрю.
Если есть еще предложения - пишите. Все таки у исходного компьютера все работает без макроса.
olegspectr вне форума Ответить с цитированием
Старый 17.08.2016, 16:24   #12
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Темза, сэр!

Без макроса придётся лезть в «потроха» автозамены (что по силам наверно лишь её разработчикам).

Вот более лояльный макрос, с защитой от „пустого места”:
Код:
Sub QQ() 'Берёт слово в кавычки (назначить функциональной клавише или сочетанию клавиш)
Const L = "„", R = "“"  'левые и правые кавычки требуемого начертания

If ActiveDocument.ComputeStatistics(wdStatisticWords) = 0 Then MsgBox "Нет слов!": Exit Sub

    Select Case Selection 'смотря где курсор (точнее, что за ним)
    Case Space(1), L, R
        
        With Selection                      'работаем со словом, предшествующим курсору
        MsgBox ".Words(1): " & .Words(1)
            If InStr(.Words(1), R) = 0 And .Words(1).Characters.Last <> R Then
                .Words(1) = L & Trim(.Words(1)) & R
                'Взяли в кавычки слово, после которого стоял курсор (если ещё не закавычено)
                .Extend R 'растянули выделение до правых кавычек (R) включительно
                .Collapse wdCollapseEnd 'сбросили выделение вправо
                .TypeText " "           'добавили пробел
            End If
        End With
        
    Case Else
    
        With Selection.Words(1).Previous    'работаем со словом, предшествующим курсору
        MsgBox ".Words(1): " & .Words(1)
            If InStr(.Words(1), R) = 0 And .Words(1).Characters.Last <> R Then
                .Words(1) = L & Trim(.Words(1)) & R
                'Взяли в кавычки слово, после которого стоял курсор (если ещё не закавычено)
                Selection.Extend R 'растянули выделение до правых кавычек (R) включительно
                Selection.Collapse wdCollapseEnd 'сбросили выделение вправо
                Selection.TypeText " "
            End If
        End With
        
    End Select
End Sub
Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
набрал слово, решил закавычить и жми клавишу, на которой этот макрос
Попробуйте, пожалуйста, кому не лень.

И более привычно (одно нажатие — одни кавычки) работает в документе ещё 1 код (пока сырой).

Последний раз редактировалось Sasha_Smirnov; 18.08.2016 в 04:02. Причина: убрал 1 пример.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 18.08.2016, 10:11   #13
olegspectr
 
Регистрация: 11.08.2016
Сообщений: 9
По умолчанию

Кавычки макрос присваивает последнему слову, не удобно. Нужно нажать - появились кавычки открывающиеся, написать предложение, нажать появились закрывающиеся кавычки. Как- то так. Т.е. выполнить проверку на наличие кавычек открывающихся по тексту.
olegspectr вне форума Ответить с цитированием
Старый 18.08.2016, 21:00   #14
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Вот так удобно

Код:
Sub Q_wedding() 'ставим на F5 (что на ноутбуке не требует удерживать клавишу fn)
Const S = "[ 0-9A-Za-zА-яЁё" & vbCr & "]"
Dim Q As String * 1
    
With Selection.Characters
        If Selection.Range.End = 0 Then '(Это отдельный случай: в начале документа)
            Q = Chr(132) 'открывающие кавычки-лапки
        Else
            If .Last Like S Then Q = Chr(132) Else Q = Chr(147)
            If .Last.Previous Like "[A-Za-zА-яЁё]" Then Q = Chr(147) 'закрывающие
        End If
    SendKeys Q 'печать кавычек (открывающих либо закрывающих, смотря по курсору)
End With
    
End Sub
Вообще в первом варианте (QQ) я имел в виду фразы типа «Когда-то выходил журнал „Крококодил“», где лапчатые кавычки являются внутренними.

И при наборе закавыченной фразы использовал бы автоформат при вводе (окно на рисунке), а слово внутри её — заключал бы в кавычки одним (!) тычком по F5.
Изображения
Тип файла: jpg 2016-08-16_15-50_Автозамена_при_вводе.jpg (103.6 Кб, 128 просмотров)

Последний раз редактировалось Sasha_Smirnov; 18.08.2016 в 21:45. Причина: новый код.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.08.2016, 10:33   #15
olegspectr
 
Регистрация: 11.08.2016
Сообщений: 9
По умолчанию

Последний вариант приемлемый. Спасибо.
Но он не работает под word 2003. Выдает ошибку на SendKeys Q. Нужно разбираться.
olegspectr вне форума Ответить с цитированием
Старый 19.08.2016, 16:49   #16
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию 4-е сутки…

Олег, возможно, поможет параметр True через запятую после SendKeys.

Также вместо SendKeys попробуйте Selection.Typetext — пашет?
Цитата:
Сообщение от olegspectr Посмотреть сообщение
Статьи я все эти перечитал - нет ответа. Нужна именно автоматизация и именно к shift+2.
Я в пятницу установил и испытал на моём рабочем Word 2003 — по сравнению с домашним (где Windows 10) разницы не заметил. Только важно учитывать, что SendKeys шлёт свой аргумент в активное окно — и это должен быть сам документ (а, например, не редактор кода).

Последний раз редактировалось Sasha_Smirnov; 20.08.2016 в 16:49.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 22.08.2016, 09:46   #17
olegspectr
 
Регистрация: 11.08.2016
Сообщений: 9
По умолчанию

Проверил все работает. В принципе устраивает такой вариант.
Макрос повесить на одну клавишу и все.
Спасибо огромное.
Осталась загадка не разгаданой как сделали эту подмену на компьютере, что я указывал. Но видимо идей больше не осталось. Столько было просмотров и никто не предложил больше ничего. Спасибо всем.
olegspectr вне форума Ответить с цитированием
Старый 22.08.2016, 17:59   #18
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Светлое будущее

Сейчас, на 18:00, просмотров 561 (я был тут 343-м). Испытание порадовало! О багах сообщайте.
Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Весы похожи на кустик черники или брусники.
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конкатенация, запятые, двойные кавычки Dexes PHP 9 27.12.2017 20:53
Двойные кавычки внутри кавычек - как передать calypso Общие вопросы C/C++ 2 22.12.2013 19:22
Как поставить запятые между большим количеством значений solnce60 Microsoft Office Excel 17 17.03.2013 22:09
Как найти " (кавычки) ? Djeki Microsoft Office Excel 2 09.01.2012 04:25
составить прогу, заменить все пробелы на запятые tim777777 Помощь студентам 7 02.03.2009 05:52