Макрос с оператором IF
Модератор: Naeel Maqsudov
Такая ситуация, мне необходимо чтоб в документе проходила проверка, что то на подобии
если надпись существует, то
заменить
в противном случае
пропустить
вот мой пример, но он не работает =(
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
If Selection.Find.Text = "1037739913771, выд. 16.10.2003г." = True Then
Selection.HomeKey Unit:=wdStory
Else
Selection.Find.Text = "1037739913771, выд. 16.10.2003"
Selection.Find.Execute
Selection.TypeText Text:="1037739913771, выд. 16.10.2003г."
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" "
Selection.Tables(1).Rows.HeightRule = wdRowHeightAtLeast
Selection.Tables(1).Rows.Height = CentimetersToPoints(0.54)
End If
смысл этой надписи, если есть надпись "1037739913771, выд. 16.10.2003г.", то замену делать не надо и курсор должен перемещеться в верх страницы, в противном случае, делает замену по шаблону.
Но он почему то все время делает замену, не могу понять почему, проверка не проходит.
Жду помощи опытных.
если надпись существует, то
заменить
в противном случае
пропустить
вот мой пример, но он не работает =(
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
If Selection.Find.Text = "1037739913771, выд. 16.10.2003г." = True Then
Selection.HomeKey Unit:=wdStory
Else
Selection.Find.Text = "1037739913771, выд. 16.10.2003"
Selection.Find.Execute
Selection.TypeText Text:="1037739913771, выд. 16.10.2003г."
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" "
Selection.Tables(1).Rows.HeightRule = wdRowHeightAtLeast
Selection.Tables(1).Rows.Height = CentimetersToPoints(0.54)
End If
смысл этой надписи, если есть надпись "1037739913771, выд. 16.10.2003г.", то замену делать не надо и курсор должен перемещеться в верх страницы, в противном случае, делает замену по шаблону.
Но он почему то все время делает замену, не могу понять почему, проверка не проходит.
Жду помощи опытных.
Может быть из-за этого.
Конструкция Selection.Find.Text = "1037739913771, выд. 16.10.2003г." = True
VBA проверяет её с конца. Выражение "1037739913771, выд. 16.10.2003г." = True само по себе является ложным (False). И далее проверятся условие Selection.Find.Text = False, которое ложное.
Может быть, попробовать после Selection.Find.Execute проверку If Selection.Find.Found = True
Или попробывать заменять непосредственно через Find (из хелпа по VBA Word)
.Find.Execute FindText:="hi", ReplaceWith:="hello", _
Replace:=wdReplaceAll
Конструкция Selection.Find.Text = "1037739913771, выд. 16.10.2003г." = True
VBA проверяет её с конца. Выражение "1037739913771, выд. 16.10.2003г." = True само по себе является ложным (False). И далее проверятся условие Selection.Find.Text = False, которое ложное.
Может быть, попробовать после Selection.Find.Execute проверку If Selection.Find.Found = True
Или попробывать заменять непосредственно через Find (из хелпа по VBA Word)
.Find.Execute FindText:="hi", ReplaceWith:="hello", _
Replace:=wdReplaceAll
Отлично, спасибо большое =)
В VBA я профан =(
я думал об этом, но я не знал функцию Selection.Find.Found - ОФЕГИТЕЛЬНАЯ
Второй вариант не подходит, т.к. уже пробовал - начинает дублировать буквы!
Если не сложно, можно где-нибудь взять мануал по VBA (help Word не совсем подходит) - просто я не очень онимаю структуру функций Selection.Find.Found и т.д.
Програмировал на более легких языках, хочу попробовать и тут.
В VBA я профан =(
я думал об этом, но я не знал функцию Selection.Find.Found - ОФЕГИТЕЛЬНАЯ
Второй вариант не подходит, т.к. уже пробовал - начинает дублировать буквы!
Если не сложно, можно где-нибудь взять мануал по VBA (help Word не совсем подходит) - просто я не очень онимаю структуру функций Selection.Find.Found и т.д.
Програмировал на более легких языках, хочу попробовать и тут.
А можено записывать набор функций в строчку? Чтобы не в столбик, а в строчку? Какие разделители надо ставить?
Можно использовать двоеточие, но не стоит. Лучше используйте это:
Код: Выделить всё
With Selection
.HomeKey Unit:=wdStory
.Find.ClearFormatting
If .Find.Text = "1037739913771, выд. 16.10.2003г." = True Then
.HomeKey Unit:=wdStory
Else
.Find.Text = "1037739913771, выд. 16.10.2003"
...
End With
Попробуйте пробел двоеточие пробел
" : "
" : "
Тут появился вопрос, а как можно забить в переменную то что скопировали в документе?
Selection.HomeKey Unit:=wdStory
Selection.MoveRight Unit:=wdCharacter, Count:=6, Extend:=wdExtend
Selection.Copy
a = Selection.PasteAndFormat(wdPasteAndFormat)
MsgBox a
это не верно, не знаю как сделать =(
Selection.HomeKey Unit:=wdStory
Selection.MoveRight Unit:=wdCharacter, Count:=6, Extend:=wdExtend
Selection.Copy
a = Selection.PasteAndFormat(wdPasteAndFormat)
MsgBox a
это не верно, не знаю как сделать =(
Код: Выделить всё
a = Selection '.PasteAndFormat(wdPasteAndFormat)
