Пустой выделенный текст в VBA Word отображается как 2 символа - PullRequest
0 голосов
/ 14 июля 2020

Когда я запускаю свой код VBA для следующего текста, он отлично работает, пока не дойдет до разрыва абзаца. Я пытаюсь запустить тест на разрыв абзаца, но он оказывается ЛОЖЬ:

Итак, теперь мы записываем. Эээ, так что я поговорил с Берри,

, которая теперь фактически ваша собственная команда ягод, верно?

Результат выглядит так:

Итак, теперь мы записываем. Хм, так что я поговорил с Берри, которая сейчас на самом деле ваша собственная команда ягод, верно

Вот мой исходный код:

Sub OneLine()
    Dim charCount As Integer
    
    'Go to End of document and add "
    Selection.EndKey Unit:=wdStory
    Selection.TypeText Text:=" """
    
    'Go to beginning of Document
    Selection.GoTo what:=wdGoToSection, Which:=wdGoToFirst
    
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    'Count how many characters are in Selection
    charCount = Len(Selection)
    Set myRange = Selection
    myRange.Find.Execute FindText:="""", Forward:=True
    'MsgBox (myRange.Find.found)
    
        Do While myRange.Find.found = False
                   
            If charCount > 1 Then
                Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdMove
                Selection.HomeKey Unit:=wdLine, Extend:=wdMove
    
                Selection.TypeBackspace
                Selection.TypeText Text:=" "

                Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                charCount = Len(Selection)
                
            Else
                Selection.Delete
                
                Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                charCount = Len(Selection)
                
            End If
            Set myRange = Selection
            myRange.Find.Execute FindText:="""", Forward:=True
            'MsgBox (myRange.Find.found)
       Loop
       
       Selection.TypeBackspace
       Selection.TypeBackspace
       Selection.TypeBackspace
        
    Selection.GoTo what:=wdGoToSection, Which:=wdGoToFirst
    
End Sub

Я пробовал использовать оператор Find.Text:= "^p" с IF THEN, но он оказался FALSE.

Заранее спасибо!

1 Ответ

0 голосов
/ 14 июля 2020

Разобрался.

Я использовал следующие строки:

With Selection.Find
     .Execute FindText:=vbCrLf
     .Forward = True
End With

Первоначально я искал только одну вещь, разрыв абзаца или разрыв строки, но не комбинацию перевода строки и возврат каретки: vbCRLf. Я также использовал "vbCrLf", что неверно, потому что в этот момент он ищет эту строку.

Это мой последний код:

Sub OneLine()
    Dim charCount As Integer
    
    'Go to End of document and add "
    Selection.EndKey Unit:=wdStory
    Selection.TypeText Text:=" """
    
    'Go to beginning of Document
    Selection.GoTo what:=wdGoToSection, Which:=wdGoToFirst
    
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    'Count how many characters are in Selection
    charCount = Len(Selection)
    Set myRange = Selection
    myRange.Find.Execute FindText:=""""
    'MsgBox (myRange.Find.found)
    
        Do While myRange.Find.found = False
                   
            If charCount > 1 Then
                
                With Selection.Find
                    .Execute FindText:=vbCrLf
                    .Forward = True
                End With
            
                If ((Selection.Find.found = True) And (charCount = 2)) Then
                    
                    Selection.HomeKey Unit:=wdLine, Extend:=wdMove
                    Selection.TypeBackspace

                    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                    charCount = Len(Selection)
                    
                Else
                    Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdMove
                    Selection.HomeKey Unit:=wdLine, Extend:=wdMove
    
                    Selection.TypeBackspace
                    Selection.TypeText Text:=" "

                    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                    charCount = Len(Selection)
                End If
            Else
                Selection.Delete
                
                Selection.EndKey Unit:=wdLine, Extend:=wdExtend
                charCount = Len(Selection)
                
            End If
            Set myRange = Selection
            myRange.Find.Execute FindText:=""""
            'MsgBox (myRange.Find.found)
       Loop
       
       Selection.TypeBackspace
       Selection.TypeBackspace
       Selection.TypeBackspace
        
    Selection.GoTo what:=wdGoToSection, Which:=wdGoToFirst
    
End Sub
...