Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/27: Рейтинг темы: голосов - 27, средняя оценка - 4.56
1 / 1 / 1
Регистрация: 19.05.2010
Сообщений: 3

Макрос, находящий предлоги в конце строки

19.05.2010, 01:07. Показов 7350. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите плиз, сделать макрос, находящий предлоги в конце строки и заменяющий пробел после них на неразрывный.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.05.2010, 01:07
Ответы с готовыми решениями:

Макрос для удаления пробелов и вставки ; в конце каждой строки
Добрый день, для упрощения работы понадобился макрос для удаления больших пробелов и вставки ";" в конце каждой строки. С...

PowerPoint. Макрос, который переносит слова, стоящие в конце строки текстового фрейма
Привет всем! У меня есть большой файл PowerPoint на 100 слайдов, там в основном текст (в текст-боксах) и таблицы. Требования...

Макрос находящий минимальное число среди трех
Доброго времени суток! Нужно создать макрос находящий минимальное число среди трех. В третей строке ошибка : declaration terminated...

5
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
19.05.2010, 02:59
На лентах новостей просто-напросто прицепляют неразрывным пробелом ВСЕ однобуквенные слова (А, а, В, в, и, к...). А попадут ли они в конец строки (если не прицеплять!) — зависит от масштаба. (А так гарантированно не попадут!)

Я так понял, вам и предлоги типа про, об, через, вместо тоже не хочется в конце строк оставлять?
2
1 / 1 / 1
Регистрация: 19.05.2010
Сообщений: 3
21.05.2010, 10:00  [ТС]
Преподу не хочется -( а так да после всех предлогов, например приведённых вами, должен стоять пробел.
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
24.05.2010, 13:27
Visual Basic
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Буксир() ' Буксир Макрос
    Selection.Find.ClearFormatting              ' не учитывать формат искомых слов
    Selection.Find.Replacement.ClearFormatting  ' не применять формат призамене
    
    With Selection.Find                         ' далее работа с окном поиска и замены
    
        .Text = " ([A-zА-я]) {1;}"              ' Пробел(ы) (1 и более) после одинокой буквы
        .Replacement.Text = " \1^s"             'заменим на ту же букву с НЕРАЗРЫВНЫМ пробелом.
        
        .MatchWildcards = True                  ' флажок Подстановочные знаки (по Ctrl-h в документе Word)
        .Execute Replace:=wdReplaceAll          ' соответствует кнопке "Заменить все"
    
        .Text = " вместо "
        .Replacement.Text = "^&^s"
        .MatchWildcards = False                 ' подстановочные знаки здесь и далее не используем
        .Execute Replace:=wdReplaceAll
    
        .Text = " об "
        .Replacement.Text = "^&^s"
        .Execute Replace:=wdReplaceAll
    
        .Text = "перед "
        .Replacement.Text = "^&^s"
        .Execute Replace:=wdReplaceAll
    
        .Text = " про "
        .Replacement.Text = "^&^s"
        .Execute Replace:=wdReplaceAll
    
        .Text = " сверх "
        .Replacement.Text = "^&^s"
        .Execute Replace:=wdReplaceAll
    
        .Text = " через "
        .Replacement.Text = "^&^s"
        .Execute Replace:=wdReplaceAll
        
        .Text = "^0032^0160"            ' текст из пары побелов (простого, код 32, и неразрывного, код 160)
        .Replacement.Text = "^0160"     ' меняем на 1 пробел - неразрывный
        .Execute Replace:=wdReplaceAll
        
    End With
End Sub
Добавлено через 9 часов 41 минуту
Слушайте! Надо так:
Visual Basic
1
.Text=" перед "
и так далее, как это и сделано в 1-й замене (где Wildcards).

Иначе (без пробела перед искомым словом) прицепится и "вперед".

Учтите это и при добавлении других не однобуквенных предлогов.
2
1 / 1 / 1
Регистрация: 19.05.2010
Сообщений: 3
25.05.2010, 00:49  [ТС]
Лучший ответ Сообщение было отмечено Sasha_Smirnov как решение

Решение

Благодарю Вас! Прямо таки спасли=)
1
 Аватар для VistaSV30
988 / 332 / 79
Регистрация: 10.04.2012
Сообщений: 1,245
Записей в блоге: 4
05.04.2024, 15:09
Код написал Viter.Alex
Visual Basic
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
28
29
30
31
32
33
34
35
36
37
38
Option Explicit
 
Function IsEndOfLine(rng As Range) As Boolean
  Dim lineNum, nextWordLineNum As Long
  Dim retval As Boolean
  Dim nextWord As Range
  Set nextWord = rng.Words.Last.Next(wdWord)
  'Номер строки, на которой находится заданный диапазон
  lineNum = rng.Characters(2).Information(wdFirstCharacterLineNumber)
  'Номер строки, на которой находится следующее слово
  nextWordLineNum = nextWord.Information(wdFirstCharacterLineNumber)
  
  retval = lineNum <> nextWordLineNum
  If retval Then
    Debug.Print "Line number: " & lineNum
    Debug.Print "Next word line number: " & nextWordLineNum
  End If
  IsEndOfLine = retval
End Function
 
 
Sub FixOrphanePrep()
  Selection.HomeKey wdStory
  'Ищем предлоги — от одной до трёх букв, отделённых пробелами от остальных слов
  With Selection.Find
    .Text = "( [А-Яа-я]{1;3}) "
    .MatchWildcards = True
    While .Execute
      'Если найденное слово находится в конце строки
      If IsEndOfLine(.Parent.Range) Then
        'Последний символ (пробел) меняем на неразрывный пробел
        .Parent.Characters.Last.Text = ChrW(160)
        'Сворачиваем выделение, чтобы продолжить поиск
        Selection.Collapse wdCollapseEnd
      End If
    Wend
  End With
End Sub
В данном случае рассматриваются все слова длиной до 3 символов. Однако, стоит отметить, что предлоги могут быть и длиннее. Например:

- Перед, через;
- Наречные: вблизи, вглубь, вдоль, возле, около, вокруг, впереди, после и другие;
- Отымённые: посредством, в роли, в зависимости от, путём, насчёт, по поводу, ввиду, по случаю, в течение и другие;
- Глагольные: благодаря, несмотря на, спустя и другие;
- Сложные: из-под, из-за, по-над и другие;
- Составные: несмотря на, в отличие от, в связи с и другие.

Хотя правила русского языка не регламентируют использование «висячих предлогов», существуют правила типографики, которые определяют, как правильно оформлять печатные тексты.

«Висячим» называется предлог, который расположен в конце строки и связан по смыслу с самостоятельным словом в начале следующей строки. В правилах правописания нет четких указаний по поводу переноса таких предлогов, однако правила типографики рекомендуют переносить «висячие» предлоги на новую строку.

Как-то так...

Добавлено через 13 минут
Шаблон для поиска "в ручную"
( [А-Яа-я]{1;3})
\1^s
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2024, 15:09
Помогаю со студенческими работами здесь

Заменить в исходном файле предлоги «от» предлогами «до», предлоги «до» предлогами «от», частицы «не» союзами «но»
Программа должна быть на писана на языке Assembler. С комментариями. Программа должна обрабатывать исходный текстовый файл с...

Вырезать предлоги, месстоимений и союзов из строки
У нас есть массив предлогов, местоимений и союзов, допустим string words. А также есть строка text. Как из этой строки можно будет вырезать...

Сделать макрос, находящий все файлы .txt и открывающий эти файлы по очереди
Надо сделать макрос в vba excel , чтобы он находил все файлы txt и открывал после нажатие ок, все файлы txt по очереди! Sub...

Заменить в исходном файле предлоги «от» предлогами «до», предлоги «до» предлогами «от»
Заменить в файле input.txt предлоги «от» предлогами «до», предлоги «до» предлогами «от», частицы «не» союзами «но», союзы «но» частицами...

Написать метод, находящий максимум для каждой строки матрицы 10 на 10
Написать метод, находящий максимум для каждой строки матрицы 10 на 10.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru