Outlook VBA Split - разбивает строку на две строки - PullRequest
0 голосов
/ 25 сентября 2018

У меня проблема с макросом Outlook VBA, показывающим строку в одну строку.Цель состоит в том, чтобы перезаписать существующее тело письма (с некоторыми тегами HTML, но это не показано ниже для простоты). Итак, допустим, у нас есть строка с, например, 110 символами в objItem.Body.Проблема в том, что приведенный ниже код автоматически разбивает строку на две строки (и я хочу, чтобы она была в одной строке)!

Dim strSource As String
Dim aryLines() As String
Dim temp As String

strSource = objItem.Body
aryLines = Split(strSource, vbCrLf)

For i = LBound(aryLines) To UBound(aryLines)
    temp = temp & aryLines(i)
Next i

objItem.HTMLBody = temp

Где я делаю ошибку?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Цель состоит в том, чтобы поместить строку в теги HTML, но при переписывании тела по какой-то причине строка разбивается на две строки и только для строк длиной более 78 символов.- AndrewBee

Причина, по которой вы сталкиваетесь с 78, такова: https://mailformat.dan.info/body/linelength.html

0 голосов
/ 25 сентября 2018

Я посмотрел на издания вопроса.Таким образом, я предполагаю, что в objItem.Body.

есть некоторый VbCrLf. Таким образом, с Original он корректно разделяет результат, а ShouldWork возвращает одну строку, так как разбиение выполняется VbCrLf и это не повторяется:

Sub TestMe()

    Dim someInput As String
    someInput = "Sumarum: 531 - Item1 - Item2 - Item3-4. - Item5 - " & vbCrLf & _
        " - Item6 - Item7 - Item8 - Item9 Item10 - Item6 -  -"        
    Debug.Print Original(someInput)
    Debug.Print ShouldWork(someInput)
    Debug.Print Original(someInput) = ShouldWork(someInput)

End Sub

Public Function ShouldWork(someInput As String) As String

    Dim strSource As String
    Dim aryLines() As String
    Dim temp As String, i As Long        
    strSource = someInput
    aryLines = Split(strSource, vbCrLf)        
    For i = LBound(aryLines) To UBound(aryLines)
        temp = temp & aryLines(i)
    Next i        
    ShouldWork = temp

End Function

Public Function Original(someInput As String) As String

    Dim arr() As String
    Dim tt As String: tt = someInput
    Dim temp As String                
    arr = Split(tt, ":")
    temp = temp & arr(0) & ": " & arr(1)
    Original = temp

End Function

Вот что я получаю в ближайшем окне:

enter image description here

0 голосов
/ 25 сентября 2018

Ваша проблема заключается в том, как вы пересобрали / объединили переменную temp.Когда вы перебираете массив aryLines(), вы никогда не добавляете новую строку.Рассмотрим код ниже:

Sub oneLineText()
Dim strSource As String
Dim aryLines() As String
Dim temp As String

strSource = "The dog jumped over the fence"
aryLines() = Split(strSource, " ")

For Each ele in aryLines
    temp = temp & ele & " "
next ele

End Sub

Результат будет таким же, как и у источника.Теперь рассмотрим следующее:

Sub multiLineText()
Dim strSource As String
Dim aryLines() As String
Dim temp As String

strSource = "The dog jumped over the fence"
aryLines() = Split(strSource, " ")

For Each ele in aryLines
    temp = temp & ele & vbNewLine
next ele

End Sub

В результате каждая строка будет содержать переменную ele на новой строке.Как примечание, вы можете перебирать переменную с For Each вместо For i = LBound(array) to UBound(array).Каждый раз, когда цикл повторяется, необходимо выполнить вычисления LBound() и UBound().В зависимости от размера цикла это может привести к значительным накладным расходам на обработку, однако в более коротком цикле стоимость будет незначительной.
РЕДАКТИРОВАТЬ: Изменен sub oneLineText (), чтобы включать пробелы на основе комментария FreeMan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...