Vba word неразрывный пробел

I hope you can help me.
I have three questions:

  1. In my coding below I am trying to replace «([0-9])( )([A-Za-zÆæØøÅå])» with «1^s3», but the result allways ends like 13^2 or as example «3 A» would become «3A(non-breaking space)», but what I want is «3(non-breaking space)A».
  2. Is there any way I can make ([A-Za-zÆæØøÅå]) to a dynamic word? I have a list of word I want to use instead. Example «3 mg» to «3(non-breaking space)mg» or «1 kilo» to «1(non-breaking space)kilo».
  3. Is there any way I can make a search and replace, where I only replace the «space» with a «non-breaking space» and not the wildcards. The above solution will result in the wildcards being replaced by themselves, this is usually not a problem, but since I am doing this in a dokument that is in tracked changed it will be visable.
Sub NonBreakingSpace(ByVal wordApp As Object, ByVal wordDoc As Object, ByVal myStoryRange As Object)


'With Worksheets("sheet1")
'For Each cell In Range("A3:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
   ' Find1 = cell.Value
   ' Replace1 = cell.Offset(0, 1).Value
    
    For Each myStoryRange In wordDoc.StoryRanges
          With myStoryRange.Find
            .MatchCase = True
            .MatchWholeWord = True
            .MatchWildcards = True
            .Text = "([0-9])( )([A-Za-zÆæØøÅå])"
            .Forward = True
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .Replacement.Text = "1^23"
            .Execute Replace:=wdReplaceAll
    End With
    Next myStoryRange
'Next cell
'End With
End Sub

asked Sep 30, 2020 at 14:31

Casper's user avatar

  1. ^s is a non-breaking space, not ^2. You can easily find the symbols required by looking at the text in the advance Find dialog in Word.
  2. Just replace the wildcard characters with a variable containing the word you are looking for. You will need to run a separate search for each Word.
  3. Yes, but you won’t be able to use Replace. You will need to write code to process each match found. There are numerous examples that show how to do this on SO, e.g. Extracting string values containing a certain key word from Word doc to Excel with the page number

answered Oct 1, 2020 at 8:58

Timothy Rylatt's user avatar

Timothy RylattTimothy Rylatt

6,9132 gold badges9 silver badges14 bronze badges

5

Sta1917

1 / 1 / 0

Регистрация: 08.11.2012

Сообщений: 39

1

Вставить текст с неразрывным пробелом

04.08.2016, 10:03. Показов 4586. Ответов 1

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте, в MS Office Word есть форма с ComboBox с добавленными значениями

Visual Basic
1
2
3
4
5
With Pribor_1
    .AddItem "Прибор1 зав. № 11111"
    .AddItem "Прибор2 зав. № 22222"
    .AddItem "Прибор3 зав. № 33333"
End With

они вставляются в CustomDocumentProperties и далее с помощью полей отображаются в тексте документа Word.
можно ли добавить неразрывный пробел между «№ 11111», «№ 22222″,»№ 33333»



0



KoGG

5590 / 1580 / 406

Регистрация: 23.12.2010

Сообщений: 2,366

Записей в блоге: 1

04.08.2016, 11:41

2

Лучший ответ Сообщение было отмечено Sta1917 как решение

Решение

Можно

Visual Basic
1
2
3
4
5
With Pribor_1
    .AddItem "Прибор1 зав. №" & Chr(160) & "11111"
    .AddItem "Прибор2 зав. №" & Chr(160) & "22222"
    .AddItem "Прибор3 зав. №" & Chr(160) & "33333"
End With



2



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

04.08.2016, 11:41

2

Формулировка задачи:

Здравствуйте, в MS Office Word есть форма с ComboBox с добавленными значениями

они вставляются в CustomDocumentProperties и далее с помощью полей отображаются в тексте документа Word.
можно ли добавить неразрывный пробел между «№ 11111», «№ 22222″,»№ 33333»

Код к задаче: «Вставить текст с неразрывным пробелом»

textual

With Pribor_1
    .AddItem "Прибор1 зав. №" & Chr(160) & "11111"
    .AddItem "Прибор2 зав. №" & Chr(160) & "22222"
    .AddItem "Прибор3 зав. №" & Chr(160) & "33333"
End With

Полезно ли:

11   голосов , оценка 4.182 из 5

Группа: Проверенные

Ранг: Обитатель

Сообщений: 329


Репутация:

8

±

Замечаний:
0% ±


2010

Здравствуйте все!

Вот сделал красивый (потому, что компактный) макрос для замены обычного пробела на неразрывный для предлогов
(чтобы не было «висячих» предлогов на конце строк)

[vba]

Код

Sub nbsp_pred()

‘ Замена пробелов на неразрывные

Selection.WholeStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
        .Text = «( [ВвСсКк№]) «
        .Replacement.Text = «1^s»
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.MoveLeft Unit:=wdCharacter, Count:=1
End Sub

[/vba]

Однако, в данном случае поиск идёт по однобуквенным предлогам.
А как можно сделать тоже самое, но для двух- и более буквенных предлогов?
Например, для «по», «до» и прочее…

2. Подскажите, как избавиться от «задваивания» описания предлогов в первом случае (готовом) и во втором (по которому вопрос) из-за различия в больших и маленьких буквах («в» и «В», «с» и «С», и т.д.)? Чтобы регистр был любой.

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

Sub FIO_SP

    With Selection.find

        .Wrap = wdFindContinue
        .MatchWildcards = True
        .text = «(<[A-ZА-Я][a-zа-я]@>)(,)([^32^0160])([A-ZА-Я].)([^32^0160])([A-ZА-Я].)»
        .Replacement.text = «12^01604^01605»
        .Execute Replace:=wdReplaceAll

            End With

End Sub

Но по этому алгоритму неразрывный пробел ставиться и в сочетании К. А. Абульхановой, А. Н. Славской, после фамилии Абульхановой, а мне этого не нужно.
Как этого избежать? Пример приложил.

[вложение удалено администратором]

Like this post? Please share to your friends:
  • Vba word найти таблицу с текстом
  • Vba word найти строку
  • Vba word название файла
  • Vba word на примерах
  • Vba word курсор в начало документа