как получить ширину строки ячейки с переносом текста в vba

возможно ли получить «массив строк» ​​ИЛИ положение «метки разрыва строки (vbCrLf?)» каждой строки в ячейке «wraptext = True», чей «.Text» является длинной строкой и автоматически разбивается на несколько строк ?


person johnn    schedule 22.06.2013    source источник


Ответы (1)


Да, это возможно, учитывая частичное решение для переноса строк вручную. Код будет выглядеть следующим образом (для Activecell):

Sub Solution()

    Dim myArray
    myArray = Split(ActiveCell, Chr(10))

    'return to range cells below activecell
    ActiveCell.Offset(1, 0).Resize(UBound(myArray) + 1, 1) = Application.Transpose(myArray)
End Sub

До и после представлены на фото ниже:

введите здесь описание изображения

Дополнительный совет: вместо Chr(10) вы можете попробовать использовать Chr(13), если не получите ожидаемых результатов (другие возможные разделители: vbCrLf и vbCr).

person Kazimierz Jawor    schedule 22.06.2013
comment
Это лишь частично отвечает на вопрос. Не обрабатывает автоматические разрывы в обернутой ячейке - person chris neilsen; 22.06.2013
comment
KazJaw, спасибо за ответ, но все же я не получил ожидаемого результата. Например: текст в Range("A1") = "Alpha Betha Delta" (обратите внимание, что в строке нет строки разрыва), в то время как ячейки .wraptext =True заставляют слова разбиваться на несколько строк в ВНЕШНИЙ ВИД. Итак, как и в вашем коде myArray = Split(Range("A1"), Chr(10)), я всегда получаю myArray только с одним элементом myArray(0) = "Alpha Betha Delta", но не тем, что ожидал myArray(0) = "Alpha";myArray(1) = "Betha";myArray(2) = "Delta"; - person johnn; 22.06.2013
comment
Итак, вы имеете в виду, что невозможно автоматически отформатировать несколько строк с помощью .warptext = True в vba, если в строке нет ручных разрывов строк? - person johnn; 22.06.2013
comment
на мой взгляд, невозможно получить строки на основе внешнего вида текста ячейки. - person Kazimierz Jawor; 22.06.2013
comment
Одним из подходов может быть вычисление разрывов строк из .Columnwidth, .Rowheight, LEN, Split и размера шрифта. - person Jüri Ruut; 22.06.2013
comment
@juri, а также windows.zoom и разрешение экрана, которые также могут влиять на отображение текста. - person Kazimierz Jawor; 22.06.2013
comment
@KazJaw, ваше решение работает по крайней мере для примера, если myArray = Split(Range("A1"), " "). - person Jüri Ruut; 22.06.2013
comment
Спасибо всем, кто ответил и прочитал этот вопрос. Наконец я подумал о способе first convert the wraptexted Cell into an image, затем OCR it to get the text with line breaks just like the appearance is. Но, в конце концов, это решение оказалось не очень хорошим. - person johnn; 23.06.2013