2010-10-19 2 views
1

я нашел интересную вещь:объект Слово VBA Range.Find работает неправильно

В Word 2010, выберите какой-нибудь текст, и запустить следующий код VBA:

public Sub Test() 
    With Selection.Range.Find 
     MsgBox .Execute(Selection.Range.text) 
     MsgBox .Found 
    End With 
End Sub 

Обе коробки два сообщения говорят " False ", но оба должны быть" True ". Зачем?

ответ

0

Очень интересно!

Word 2007 демонстрирует то же поведение.

Любопытно, что это не только при поиске в VBA: если вы выберете какой-либо текст в документе и нажмите «Найти», диалог поиска по умолчанию отобразит выбранный текст как цель.
При нажатии «Найти далее>» Word выводит сообщение об ошибке «Слово дошло до конца документа ... и т. Д.».

Это не произойдет, если вы измените текст на поиск, удалив последний символ. VBA согласуется с этим: действующий код работает!

Sub tt() 
    With Selection.Range.Find  
     MsgBox .Execute(Mid(Selection.Range.Text,1,Len(Selection.Range.Text)-1)) 
     MsgBox .Found 
    End With 
End Sub 

Не разрешено ... но оказалось совместимым с графическим интерфейсом.

HTH!

+0

Большое спасибо за ваш ответ. – dxjh

Смежные вопросы