Powerpoint VBA Удалить возврат каретки из форматированного текстового поля

Я пытаюсь удалить возврат каретки из текстового поля с форматированным текстом:

For i = ThisShape.TextFrame2.TextRange.Runs.Count To 1 Step -1
  ThisText = ThisShape.TextFrame2.TextRange.Runs(i).Text
  ThisText = Replace(ThisText, Chr(13), "")
  ThisShape.TextFrame2.TextRange.Runs(i).Text = ThisText
Next i

По какой-то странной причине текстовое поле остается с возвратом каретки. Любая помощь будет оценена по достоинству.

Дэйвид


person Cymro    schedule 19.05.2018    source источник
comment
Я подозреваю, что это может быть перевод строки Chr(10) - попробуйте заменить Chr(13) константой vbCrLf   -  person dbmitch    schedule 19.05.2018
comment
Можете ли вы заменить весь текстовый диапазон? With ThisShape.TextFrame2.TextRange .Text = Replace(.Text, vbCr, "") End With   -  person dbmitch    schedule 19.05.2018
comment
Можете попробовать вместо этого удалить Chr(11)? Похоже, что с 2007 года PP использует это как разрыв строки для другого текста и заголовков.   -  person dbmitch    schedule 19.05.2018
comment
Митч прочитал пост о chr(11). Пробовал уже. Не повезло. Вы можете создать текстовое поле с 2 строками, по 1 слову в строке. Раскрасьте каждое слово своим цветом. Вы увидите, что просто невозможно избавиться от возврата каретки, сохранив при этом цвета. Странный.   -  person Cymro    schedule 19.05.2018
comment
Вы просто пытаетесь сделать текстовые поля переносом слов - в этом смысл? Вы можете нажать Format Shape | Textbox | Wrap text in shape?   -  person dbmitch    schedule 19.05.2018
comment
Цель› Line1Multicolour:Line2Grey -> Дублировать фигуру, разделить по горизонтали, выровнять по вертикали. Leftshape: удалить серую линию, RightShape: удалить не серую линию. Затем 2 формы, обе без переноса слов. Я сдался. Я думаю, что это ошибка powerpoint. Просто подумал, что все таки спрошу.   -  person Cymro    schedule 19.05.2018
comment
Попробуйте использовать TextRange.Find(Chr(13), PositionOfTheLastCharacter -1) для поиска специальных управляющих символов. Chr(13) часто скрывается от обнаружения. stackoverflow.com/questions/ 31895719/   -  person konahn    schedule 16.03.2021


Ответы (1)


Функция CLEAN используется редко, поэтому о ней часто забывают.

CLEAN удаляет непечатаемые символы (ASCII от 0 до 31) из заданного текста. Вы можете использовать его в VBA:

myStr = Application.WorksheetFunction.Clean(myStr)

...или как функция рабочего листа Excel:

=CLEAN(A1)

Пример:

Sub cleanDemo()

    Dim mystr As String

    'populate string with linefeeds and carriage returns.
    'note: vbLf = chr(10): vbCr = chr(13) : vbCrLf = vbCr+vbLf
    mystr = "A" & vbLf & "B" & vbCr & "C" & vbCrLf & "D"

    'display string and it's length
    MsgBox mystr, , "myStr is " & Len(mystr) & " char long."

    'remove ASCII 0 through 31
    mystr = Application.WorksheetFunction.Clean(mystr)

    'display string and it's length
    MsgBox mystr, , "myStr is " & Len(mystr) & " char long."

End Sub

... возвращает:

img


Список всех символов в строке:

Процедура перечисляет символы и их коды, найденные в указанной строке:

Sub showAllChars(strIn as String)
'Lists all ASCII character codes used in the specified string.
'Adaptable to UNICODE by changing Asc to AscW and Chr to ChrW
Dim strIn As String, c As String, p As Long

For p = 1 To Len(strIn)
    c = Mid(strIn, p, 1)
    Debug.Print "Pos#" & p & ": Chr(" & Asc(c) & ") =[";
    Select Case Asc(c)
        Case 10
            Debug.Print "LF]", ;
        Case 13
            Debug.Print "CR]", ;
        Case Else
            Debug.Print c & "]", ;
    End Select
    If p / 5 = p \ 5 Then Debug.Print
Next p
Debug.Print "Done. (Length=" & Len(strIn) & ")"
End Sub

Пример вывода:

Pos#1: Chr(65) =[A]         Pos#2: Chr(66) =[B]         Pos#3: Chr(13) =[CR]        
Pos#4: Chr(67) =[C]         Pos#5: Chr(63) =[?]         Pos#6: Chr(68) =[D]         
Pos#7: Chr(17) =[]          Pos#8: Chr(69) =[E]         Pos#9: Chr(70) =[F]         
Pos#10: Chr(63) =[?]        Pos#11: Chr(71) =[G]        Pos#12: Chr(10) =[LF]       
Pos#13: Chr(72) =[H]        Pos#14: Chr(73) =[I]        Done. (Length=14)

Дополнительная информация:

person ashleedawg    schedule 19.05.2018
comment
Я не могу найти объект рабочего листа в PowerPoint. Речь идет не столько об очистке строк, сколько об удалении прогонов и отказе PowerPoint удалить возврат каретки. Пожалуйста, смотрите мой код вверху. На самом деле я удаляю возврат каретки из строки, но он не удаляется из прогонов. То же самое происходит при удалении строк. Возврат каретки остается даже после удаления строк: OriginalShape.TextFrame.TextRange.Lines(2).Delete NewShape.TextFrame.TextRange.Lines(1).Delete оставляет раздражающий возврат каретки. Очень странно и похоже на ошибку. - person Cymro; 21.05.2018