I hope you can help me.
I have three questions:
- 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».
- 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».
- 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
- ^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.
- 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.
- 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 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 с добавленными значениями
они вставляются в CustomDocumentProperties и далее с помощью полей отображаются в тексте документа Word.
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||
04.08.2016, 11:41 |
2 |
|||
Сообщение было отмечено Sta1917 как решение РешениеМожно
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
Замечаний: |
Здравствуйте все!
Вот сделал красивый (потому, что компактный) макрос для замены обычного пробела на неразрывный для предлогов
(чтобы не было «висячих» предлогов на конце строк)
[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
Но по этому алгоритму неразрывный пробел ставиться и в сочетании К. А. Абульхановой, А. Н. Славской, после фамилии Абульхановой, а мне этого не нужно.
Как этого избежать? Пример приложил.
[вложение удалено администратором]