возможно ли получить «массив строк» ИЛИ положение «метки разрыва строки (vbCrLf?)» каждой строки в ячейке «wraptext = True», чей «.Text» является длинной строкой и автоматически разбивается на несколько строк ?
как получить ширину строки ячейки с переносом текста в vba
Ответы (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
Это лишь частично отвечает на вопрос. Не обрабатывает автоматические разрывы в обернутой ячейке
- person chris neilsen; 22.06.2013
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
Итак, вы имеете в виду, что невозможно автоматически отформатировать несколько строк с помощью
.warptext = True
в vba, если в строке нет ручных разрывов строк?
- person johnn; 22.06.2013
на мой взгляд, невозможно получить строки на основе внешнего вида текста ячейки.
- person Kazimierz Jawor; 22.06.2013
Одним из подходов может быть вычисление разрывов строк из
.Columnwidth
, .Rowheight
, LEN
, Split
и размера шрифта.
- person Jüri Ruut; 22.06.2013
@juri, а также windows.zoom и разрешение экрана, которые также могут влиять на отображение текста.
- person Kazimierz Jawor; 22.06.2013
@KazJaw, ваше решение работает по крайней мере для примера, если
myArray = Split(Range("A1"), " ")
.
- person Jüri Ruut; 22.06.2013
Спасибо всем, кто ответил и прочитал этот вопрос. Наконец я подумал о способе
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