Я пытался использовать Visual Basi c, чтобы взять каждую строку текста в документе Word и отформатировать ее определенным образом в зависимости от содержания текста.
Я пытаюсь добиться этого следующим образом:
1. сохранить текущий выбор текста
2. найти количество строк в выделении
3. выполнить итерацию по этим строкам выбирая по одной строке за раз
4. изменяя строку
5. в конце восстановите исходное выделение
Я сократил свой код до минимального примера проблемы.
Sub ReplaceText()
' Save the original selection
Dim original As range
Set original = Selection.range
' Get the number of lines in the selection
Dim lines As Long
With Dialogs(wdDialogToolsWordCount)
.Execute
lines = .lines
End With
' Iterate through each line
For Index = 1 To lines
' Go to beginning of line
Selection.HomeKey Unit:=wdLine
' Select the entire line
Selection.Expand wdLine
' Save the text of the line
Dim line
line = Selection.Text
' Line with the problem
' Just setting the selection text back to itself
Selection.Text = line
' Advance cursor to next Line
Selection.MoveDown Unit:=wdLine
Next Index
' Restore the original selection
original.Select
End Sub
Проблема в том, что когда исходное выделение восстанавливается в конце, оно не восстанавливается должным образом. Восстановленный выбор выбирает все из исходного выбора, кроме последней строки. Я не совсем уверен, почему это происходит.
Редактировать: После оригинала. Выберите, я добавил строку:
Selection.MoveDown Extend:=wdExtend
И это, похоже, работает, но это не объясняет, почему что происходит, и как я могу предотвратить изменение выбора.