Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
Word

Замена аббревиатур на расшифровку

13.08.2025, 00:09. Показов 2017. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Документ состоит из строк с аббревиатурами. Каждая аббревиатура имеет формат:
КД<табуляция><цифра>
Ее нужно заменить на:
КД<табуляция><короткое тире><табуляция>расшифровка
Код ниже работает, но делает неправильную замену, в результате появляется такая конструкция:
КД<табуляция><короткое тире><табуляция>расшифровка<табуляция><ц ифра>
то есть в программе идет поиск по КД, после повторного поиска эта конструкция разрастается.
Надо чтобы поиск шел только по КД<табуляция><цифра>, но у меня не получается скрестить типы Variant и String.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Sub TranscriptInteractiveComboBox()
'
' Расшифровка аббревиатур интерактивная
' Edited 11.08.2025
'
 
    Dim abbreviations As Object
    Set abbreviations = CreateObject("Scripting.Dictionary")
 
    ' Определяем аббревиатуры и их расшифровки
    abbreviations.Add "КП", Array("крупный план", "командный пункт", "коробка передач", "коммерческое предложение")
    abbreviations.Add "ВС", Array("Верховный Совет", "вооруженные силы", "вычислительная система", "вилка соединительная", "воздушное судно")
    abbreviations.Add "ИД", Array("исполнительный директор", "исходные данные", "издательский дом", "индукционный датчик", "индивидуальный дозиметр", "идентификатор доступа", "индекс доходности")
 
    Dim abbr As Variant
    Dim options As Variant
    Dim choice As String
    Dim i As Integer
    
    ' Получаем текст документа
    Dim docText As String
    docText = ActiveDocument.Content.Text
 
    ' Перебираем все аббревиатуры
    For Each abbr In abbreviations.Keys
        ' Проверяем наличие аббревиатуры в документе
        If InStr(1, docText, abbr, vbTextCompare) > 0 Then
            options = abbreviations(abbr)
            
            ' Открываем UserForm и передаем данные
            With FormAbbrTrans
                .ComboBoxTrans.Clear
                .LabelAbbr.Caption = abbr ' Устанавливаем текст текущей аббревиатуры
                For i = LBound(options) To UBound(options)
                    .ComboBoxTrans.AddItem options(i)
                Next i
                
                .Caption = "Выбор варианта расшифровки аббревиатуры"
                .ComboBoxTrans.ListIndex = 0
                .Show
            End With
            
            ' Получаем выбор из UserForm
            If FormAbbrTrans.Tag = "OK" Then
                ' Заменяем на выбранную расшифровку
                Set rng = ActiveDocument.Content
                With rng.Find
                    .Text = abbr
                    .replacement.Text = abbr & vbTab & "–" & vbTab & FormAbbrTrans.ComboBoxTrans.Value
                    .MatchCase = True
                    .Execute Replace:=wdReplaceAll
                End With
            ElseIf FormAbbrTrans.Tag = "Exit" Then
                Exit Sub ' Выход из макроса
            End If
            
            ' Сбросить Tag для следующей аббревиатуры
            FormAbbrTrans.Tag = ""
        End If
    Next abbr
    MsgBox "Расшифровка аббревиатур завершена!", vbInformation, "Аббревиатуры"
End Sub
Вложения
Тип файла: docx Тестовый файл для ComboBox.docx (38.0 Кб, 15 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2025, 00:09
Ответы с готовыми решениями:

Расшифровка аббревиатур в тексте (макрос)
Есть текст, в нем различные аббревиатуры и названия. Например, &quot;ФК Зенит&quot;. Необходимо переделать...

Поиск аббревиатур
Здравствуйте. Подскажите, как на vba написать макрос поиска заглавных русских (только букв русского...

Поиск аббревиатур модернизация кода
Здравствуйте, в теме https://www.cyberforum.ru/vba/thread2141982.html был приведен код Казанского...

18
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
13.08.2025, 08:54
Цитата Сообщение от galexi68 Посмотреть сообщение
FormAbbrTrans
А где данная форма или сами должны рисовать её со всеми контроллами на ней?

Неуверен но пробуйте:
Visual Basic
1
2
3
4
5
6
7
8
9
10
            With rng.Find
                .Text = abbr
                .Replacement.Text = abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                .MatchCase = True
                .Forward = True
                .Wrap = wdFindContinue
                .Format = False
                .MatchWholeWord = True
                .Execute Replace:=wdReplaceAll
            End With
0
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
13.08.2025, 09:51  [ТС]
Не тот файл загрузил, теперь жду как пройдет 12 часов, чтобы изменить закрепленный файл.
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
13.08.2025, 09:53
Цитата Сообщение от galexi68 Посмотреть сообщение
теперь жду как пройдет 12 часов
Можете в новом сообщение прикрепить
Цитата Сообщение от galexi68 Посмотреть сообщение
тот файл
0
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
13.08.2025, 10:30  [ТС]
Файл с макросом и формой
Вложения
Тип файла: rar Тестовый файл для ComboBox.rar (42.9 Кб, 11 просмотров)
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
13.08.2025, 11:01
galexi68, Вам надо получить
Цитата Сообщение от galexi68 Посмотреть сообщение
КД<табуляция><короткое тире><табуляция>расшифровка
без
Цитата Сообщение от galexi68 Посмотреть сообщение
<цифра>
в конце, я правильно понял? И поиск мы производим только по
Цитата Сообщение от galexi68 Посмотреть сообщение
КД<табуляция><цифра>
а если цифра в конце отсутсвует то не производим замену? Если да, то вот доработка прошлого блока кода:
Visual Basic
1
2
3
4
5
6
7
8
                With rng.Find
                    .Text = abbr & "^t[0-9]"
                    .Replacement.Text = abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                    .MatchWildcards = True
                    .Format = False
                    .MatchCase = True
                    .Execute Replace:=wdReplaceAll
                End With
1
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
13.08.2025, 12:16  [ТС]
Цифра в конце будет присутствовать всегда, только может разной (1, 45, 325, 100500). (количество упоминаний в тексте).
Поэтому я изменил строку поиска на
. Text = abbr & "^t[0-9]{1;}"
. Replacement. Text я оставил, как было. Оно и так работает.
Теперь замена происходит, как надо.
Но есть еще один нюанс.
При повторном запуске макроса появляется все та же форма с выбором все тех же вариантов. Замены, естественно, не происходит.
Хотелось бы в строках
For Each abbr In abbreviation. Keys
If InStr(1, docText, abbr, vbTextCompare) > 0
искалась не abbr, а abbr & "^t[0-9]{1;}".
Тогда окно формы не будет появляться, если в документе есть все аббревиатуры с расшифровкамии.
У меня пока это не получается.
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
13.08.2025, 13:22
Лучший ответ Сообщение было отмечено galexi68 как решение

Решение

Цитата Сообщение от galexi68 Посмотреть сообщение
Тогда окно формы не будет появляться, если в документе есть все аббревиатуры с расшифровкамии.
В таком случае меняем логику
Цитата Сообщение от galexi68 Посмотреть сообщение
искалась не abbr, а abbr & "^t[0-9]{1;}"
Вот полностью код:
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Option Explicit
 
Sub TranscriptInteractiveComboBox()
    Dim abbreviations As Object
    Set abbreviations = CreateObject("Scripting.Dictionary")
 
    ' Определяем аббревиатуры и их расшифровки
    abbreviations.Add "КП", Array("крупный план", "командный пункт", "коробка передач", "коммерческое предложение")
    abbreviations.Add "ВС", Array("Верховный Совет", "вооруженные силы", "вычислительная система", "вилка соединительная", "воздушное судно")
    abbreviations.Add "ИД", Array("исполнительный директор", "исходные данные", "издательский дом", "индукционный датчик", "индивидуальный дозиметр", "идентификатор доступа", "индекс доходности")
 
    Dim abbr As Variant
    Dim options As Variant
    Dim i As Integer
    Dim rng As Range
    
    For Each abbr In abbreviations.Keys
        
        ' Сначала проверяем, есть ли в документе шаблон abbr + табуляция + цифра
        Set rng = ActiveDocument.Content
        
        With rng.Find
            .Text = abbr & "^t[0-9]"
            .MatchWildcards = True
            .Format = False
            .MatchCase = True
            
            If Not .Execute Then
                
                ' Пропустить, если не найдено
                GoTo SkipAbbr
            End If
        
        End With
 
        ' Если нашли, показываем форму
        options = abbreviations(abbr)
        
        With FormAbbrTrans
            .ComboBoxTrans.Clear
            .LabelAbbr.Caption = abbr
            
            For i = LBound(options) To UBound(options)
                .ComboBoxTrans.AddItem options(i)
            Next i
            
            .Caption = "Выбор варианта расшифровки аббревиатуры"
            .ComboBoxTrans.ListIndex = 0
            .Show
        End With
        
        ' Получаем выбор из UserForm
        If FormAbbrTrans.Tag = "OK" Then
            Set rng = ActiveDocument.Content
            
            With rng.Find
                .Text = abbr & "^t[0-9]"
                .Replacement.Text = abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                .MatchWildcards = True
                .Format = False
                .MatchCase = True
                .Execute Replace:=wdReplaceAll
            End With
        
        ElseIf FormAbbrTrans.Tag = "Exit" Then
            Exit Sub
        End If
        
SkipAbbr:
        FormAbbrTrans.Tag = ""
    Next abbr
 
    MsgBox "Расшифровка аббревиатур завершена!", vbInformation, "Аббревиатуры"
End Sub
Вроде отрабатывает правильно. Удачи.
1
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
13.08.2025, 14:23  [ТС]
Больше спасибо!
0
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
21.08.2025, 22:31  [ТС]
Помогите улучшить этот макрос. Я хочу сюда вставить MsgBox. Идея такая:
- если я нажимаю ДА, то код программы выполняется, как есть;
- если я нажимаю НЕТ, то элементы массива, имеющие одно значение ("КД", "НКО", "СББ"), должны автоматически заменяться без появления формы FormAbbrTrans, а элементы массива, имеющие много значений ("ВС", "ИД", "КП"), должны по-прежнему обрабатываться через форму.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Option Explicit
 
Sub TransInterShadCombo()
'
' Расшифровка аббревиатур интерактивная
' Edited 21.08.2025
'
    Dim abbreviations As Object
    Set abbreviations = CreateObject("Scripting.Dictionary")
 
    ' Определяем аббревиатуры и их расшифровки
    abbreviations.Add "ВС", Array("вычислительная система", "вилка соединительная", "воздушное судно")
    abbreviations.Add "ИД", Array("исполнительный директор", "издательский дом", "идентификатор доступа", "индекс доходности")
    abbreviations.Add "КД", Array("конструкторская документация")
    abbreviations.Add "КП", Array("коробка передач", "коммерческое предложение")
    abbreviations.Add "НКО", Array("некоммерческая организация")
    abbreviations.Add "СББ", Array("санитарно-бытовой блок")
  
    Dim Abbr As Variant
    Dim options As Variant
    Dim i As Integer
    Dim rng As Range
    Dim myResponse As Integer
        
    myResponse = MsgBox("Нажмите ДА , если хотите полностью контролировать расшифровку аббревиатур." & Chr(13) & Chr(10) _
                      & "Нажмите НЕТ, если хотите, чтобы часть общепринятых" & Chr(13) & Chr(10) _
                      & "аббревиатур была расшифрована автоматически.", vbQuestion + vbYesNo + vbDefaultButton2, "Аббревиатуры")
'    If myResponse = vbYes Then
'
'    Else
'    End If
    
    For Each Abbr In abbreviations.keys
        
        ' Сначала проверяем, есть ли в документе шаблон abbr + табуляция + цифра
        Set rng = ActiveDocument.Content
        With rng.Find
            .Text = Abbr & "^t[0-9]{1;}"
            .MatchWildcards = True
            .Format = False
            .MatchCase = True
            
            If Not .Execute Then
                
                ' Пропустить, если не найдено
                GoTo SkipAbbr
            End If
        End With
 
        ' Если нашли, показываем форму
        options = abbreviations(Abbr)
        
        With FormAbbrTrans
            .ComboBoxTrans.Clear
            .LabelAbbr.Caption = Abbr
            
            For i = LBound(options) To UBound(options)
                .ComboBoxTrans.AddItem options(i)
            Next i
            
            .Caption = "Выбор варианта расшифровки аббревиатуры"
            .ComboBoxTrans.ListIndex = 0
            .Show
        End With
        
        ' Получаем выбор из UserForm
        If FormAbbrTrans.Tag = "OK" Then
        
        ' Заменяем на выбранную расшифровку
        Set rng = ActiveDocument.Content
        With rng.Find
                .Text = Abbr & "^t[0-9]{1;}"
                .Replacement.Text = Abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                .MatchWildcards = True
                .Format = False
                .MatchCase = True
                .Execute Replace:=wdReplaceAll
        End With
        
        ElseIf FormAbbrTrans.Tag = "Exit" Then
            Exit Sub
        End If
        
SkipAbbr:
       ' Сбросить Tag для следующей аббревиатуры
        FormAbbrTrans.Tag = ""
        
    Next Abbr
 
    MsgBox "Расшифровка аббревиатур завершена!", vbInformation, "Аббревиатуры"
End Sub
Вложения
Тип файла: rar Тестовый файл для ComboBox.rar (42.9 Кб, 7 просмотров)
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
23.08.2025, 10:32
galexi68, Так?
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Option Explicit
 
Sub TransInterShadCombo()
    '
    ' Расшифровка аббревиатур интерактивная
    ' Edited 21.08.2025
    '
    Dim abbreviations As Object
    Set abbreviations = CreateObject("Scripting.Dictionary")
 
    ' Определяем аббревиатуры и их расшифровки
    abbreviations.Add "ВС", Array("вычислительная система", "вилка соединительная", "воздушное судно")
    abbreviations.Add "ИД", Array("исполнительный директор", "издательский дом", "идентификатор доступа", "индекс доходности")
    abbreviations.Add "КД", Array("конструкторская документация")
    abbreviations.Add "КП", Array("коробка передач", "коммерческое предложение")
    abbreviations.Add "НКО", Array("некоммерческая организация")
    abbreviations.Add "СББ", Array("санитарно-бытовой блок")
 
    Dim Abbr        As Variant
    Dim options     As Variant
    Dim i           As Integer
    Dim rng         As Range
    Dim myResponse  As Integer
 
    myResponse = MsgBox("Нажмите ДА , если хотите полностью контролировать расшифровку аббревиатур." & Chr(13) & Chr(10) _
            & "Нажмите НЕТ, если хотите, чтобы часть общепринятых" & Chr(13) & Chr(10) _
            & "аббревиатур была расшифрована автоматически.", vbQuestion + vbYesNo + vbDefaultButton2, "Аббревиатуры")
 
    Dim autoMode    As Boolean
    autoMode = (myResponse = vbNo)
 
    For Each Abbr In abbreviations.keys
 
        ' Сначала проверяем, есть ли в документе шаблон abbr + табуляция + цифра
        Set rng = ActiveDocument.Content
 
        With rng.Find
            .Text = Abbr & "^t[0-9]{1;}"
            .MatchWildcards = True
            .Format = False
            .MatchCase = True
 
            If Not .Execute Then
 
                ' Пропустить, если не найдено
                GoTo SkipAbbr
            End If
 
        End With
 
        ' Если нашли, показываем форму
        options = abbreviations(Abbr)
 
        If autoMode Then
 
            Dim chosenText As String
            chosenText = options(LBound(options))
 
            ' Замена
            Set rng = ActiveDocument.Content
            With rng.Find
                .Text = Abbr & "^t[0-9]{1;}"
                .Replacement.Text = Abbr & Chr(9) & ChrW(8211) & Chr(9) & chosenText
                .MatchWildcards = True
                .Format = False
                .MatchCase = True
                .Execute Replace:=wdReplaceAll
            End With
 
        Else
 
            With FormAbbrTrans
                .ComboBoxTrans.Clear
                .LabelAbbr.Caption = Abbr
 
                For i = LBound(options) To UBound(options)
                    .ComboBoxTrans.AddItem options(i)
                Next i
 
                .Caption = "Выбор варианта расшифровки аббревиатуры"
                .ComboBoxTrans.ListIndex = 0
                .Show
            End With
 
            ' Получаем выбор из UserForm
            If FormAbbrTrans.Tag = "OK" Then
 
                ' Заменяем на выбранную расшифровку
                Set rng = ActiveDocument.Content
 
                With rng.Find
                    .Text = Abbr & "^t[0-9]{1;}"
                    .Replacement.Text = Abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                    .MatchWildcards = True
                    .Format = False
                    .MatchCase = True
                    .Execute Replace:=wdReplaceAll
                End With
 
            ElseIf FormAbbrTrans.Tag = "Exit" Then
                Exit Sub
            End If
 
        End If
 
SkipAbbr:
 
        ' Сбросить Tag для следующей аббревиатуры
        FormAbbrTrans.Tag = ""
 
    Next Abbr
 
End Sub
0
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
23.08.2025, 14:19  [ТС]
Нет. При нажатии кнопки Нет аббревиатуры, имеющие одно значение, заменяются автоматически, для аббревиатур, имеющих много значений, должна появляться форма.
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
23.08.2025, 16:34
galexi68,
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
Option Explicit
 
Sub TransInterHybrid()
    '
    ' Расшифровка аббревиатур (авто/интерактивная)
    ' Edited 23.08.2025
    '
    Dim abbreviations As Object
    Set abbreviations = CreateObject("Scripting.Dictionary")
 
    ' Определяем аббревиатуры и их расшифровки
    abbreviations.Add "ВС", Array("вычислительная система", "вилка соединительная", "воздушное судно")
    abbreviations.Add "ИД", Array("исполнительный директор", "издательский дом", "идентификатор доступа", "индекс доходности")
    abbreviations.Add "КД", Array("конструкторская документация")
    abbreviations.Add "КП", Array("коробка передач", "коммерческое предложение")
    abbreviations.Add "НКО", Array("некоммерческая организация")
    abbreviations.Add "СББ", Array("санитарно-бытовой блок")
 
    Dim Abbr        As Variant
    Dim options     As Variant
    Dim i           As Integer
    Dim rng         As Range
 
    Dim myResponse  As Integer
    myResponse = MsgBox("Нажмите ДА , если хотите полностью контролировать расшифровку аббревиатур." & vbCrLf _
            & "Нажмите НЕТ, если хотите, чтобы часть общепринятых" & vbCrLf _
            & "аббревиатур была расшифрована автоматически.", _
            vbQuestion + vbYesNo + vbDefaultButton2, "Аббревиатуры")
 
    Dim autoMode    As Boolean
    autoMode = (myResponse = vbNo)
 
    For Each Abbr In abbreviations.Keys
 
        ' Сначала проверяем, есть ли в документе шаблон abbr + табуляция + цифра
        Set rng = ActiveDocument.Content
 
        With rng.Find
            .Text = Abbr & "^t[0-9]{1;}"
            .MatchWildcards = True
            .Format = False
            .MatchCase = True
 
            If Not .Execute Then GoTo SkipAbbr
        End With
 
        options = abbreviations(Abbr)
 
        If autoMode And (UBound(options) = LBound(options)) Then
 
            ' Автозамена (только одно значение в массиве)
            Set rng = ActiveDocument.Content
 
            With rng.Find
                .Text = Abbr & "^t[0-9]{1;}"
                .Replacement.Text = Abbr & Chr(9) & ChrW(8211) & Chr(9) & options(LBound(options))
                .MatchWildcards = True
                .Format = False
                .MatchCase = True
                .Execute Replace:=wdReplaceAll
            End With
 
        Else
            
            ' Режим через форму
            With FormAbbrTrans
                .ComboBoxTrans.Clear
                .LabelAbbr.Caption = Abbr
                
                For i = LBound(options) To UBound(options)
                    .ComboBoxTrans.AddItem options(i)
                Next i
                
                .Caption = "Выбор варианта расшифровки аббревиатуры"
                .ComboBoxTrans.ListIndex = 0
                .Show
            End With
 
            If FormAbbrTrans.Tag = "OK" Then
                Set rng = ActiveDocument.Content
                
                With rng.Find
                    .Text = Abbr & "^t[0-9]{1;}"
                    .Replacement.Text = Abbr & Chr(9) & ChrW(8211) & Chr(9) & FormAbbrTrans.ComboBoxTrans.Value
                    .MatchWildcards = True
                    .Format = False
                    .MatchCase = True
                    .Execute Replace:=wdReplaceAll
                End With
            
            ElseIf FormAbbrTrans.Tag = "Exit" Then
                Exit Sub
            End If
        
        End If
 
SkipAbbr:
 
        ' Сбросить Tag для следующей аббревиатуры
        FormAbbrTrans.Tag = ""
    Next Abbr
 
End Sub
2
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
23.08.2025, 19:30  [ТС]
Спасибо. Так работает.
В процессе выяснилась одна засада. Может быть несколько строк такого вида:
Visual Basic
1
abbreviations.Add "АБВ^sМНБ", Array("аббревиатура большая возможно ну очень большущая^l^t^tможет не хватить")
В результате замена в Word проходит правильно, но в форме пользователь будет видеть разные непонятные значки (^s^l^t^t).
Можно ли сделать так, чтобы программа работала, как есть, а пользователь видел в форме:
АБВ МНБ
аббревиатура большая возможно ну очень большущая может не хватить
то есть заменить ^s на пробел и ^l^t^t на пробел?
0
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
24.08.2025, 12:24
galexi68, В процессе ещё что-то выяснится... Я пас. Удачи.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12215 / 5058 / 812
Регистрация: 07.08.2010
Сообщений: 14,913
Записей в блоге: 4
25.08.2025, 06:56
Цитата Сообщение от galexi68 Посмотреть сообщение
аббревиатура большая возможно ну очень большущая может не хватить
У вордовской замены есть ограничение -254 символа
1
0 / 0 / 0
Регистрация: 09.07.2025
Сообщений: 12
26.08.2025, 11:32  [ТС]
В последнем коде некорректный поиск и замена.
Допустим ВС - вычислительная система. Запускается форма, нажимаем ОК, и если случайно в тексте оказались АВС, БВС, ВВС, они все пойдут с расшифровкой "вычислительная система". В аббревиатуре ВС символ "В" это начало строки. Как ограничить поиск, чтобы ничего лишнего не вылезало?
0
54 / 42 / 14
Регистрация: 01.10.2015
Сообщений: 188
26.08.2025, 13:05
Лучший ответ Сообщение было отмечено galexi68 как решение

Решение

Привет! Замените
Visual Basic
1
.Text = Abbr & "^t[0-9]{1;}"
на
Visual Basic
1
.Text = "<" & Abbr & "^t[0-9]{1;}"
1
Одесса - Украина
 Аватар для MikeVol
517 / 196 / 69
Регистрация: 01.04.2020
Сообщений: 610
26.08.2025, 13:08
Цитата Сообщение от galexi68 Посмотреть сообщение
Допустим ВС - вычислительная система. Запускается форма, нажимаем ОК, и если случайно в тексте оказались АВС, БВС, ВВС, они все пойдут с расшифровкой "вычислительная система". В аббревиатуре ВС символ "В" это начало строки.
У меня данное явление не воспроизводится. Смотрим видео клип по ссылке. Так же пробывал впереди
Цитата Сообщение от galexi68 Посмотреть сообщение
ВС
втавить другие буквы тот же ефект что и на видео.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.08.2025, 13:08
Помогаю со студенческими работами здесь

Как переименовать листы книги, заменив их коды на соответствующую расшифровку
Здравствуйте, товарисчи программисты.Возник небольшой вопросец: Необходимо переименовать страницы...

Считать зашифрованную строку (из определенной ячейки на листе) и произвести ее расшифровку
Нужно написать макрос, который считывает зашифрованную строку (из определенной ячейки на листе) и...

Расшифровка текстового файла
Многоуважаемые форумчане! Пожалуйста помогите с этим заданием, препод зверь, сказал за 2 дня...

Деревья и расшифровка Хаффмана.
Нужно решить три задачи, две на деревья и доделать Хаффмана. По 30 гривен(или по курсу в рублях) за...

Алгоритм расшифровки произведения Четных и Нечетных чисел
Помогите создать любой алгоритм, на любом языке для решения этой задачки:


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru