2012-03-28 73 views
2

如何通过vba代码计算包装单元中的行数?通过vba计算包装单元中的行数

With Cells(1, 1) 
    .WrapText = False 
    height1 = .height 
    .WrapText = True 
    height2 = .height 
End With 
MsgBox height2/height1 & " Lines" 

由于我已将行高设置为固定值(只有一行可见),因此此代码不起作用。

同样在我的文本中,由于数据是通过VBA代码输入的,因此不会换行。

在此先感谢。

+0

如果单元格文本有换行符,那么Dave(Edit:brettdj)在下面建议的将很好地工作。但是,如果它是一个连续的文本,然后看看这个线程。 http://stackoverflow.com/questions/9889002/get-first-two-lines-of-text-from-a-wraped-cell-in-excel/9897363#comment12631761_9897363 – 2012-03-28 08:18:53

回答

3

的一种方法是减去电池的长度与使用的工作表函数Substitute

Sub test() 
Dim c As Range 
Set c = ActiveCell 
MsgBox Len(c.Value) - Len(Application.WorksheetFunction.Substitute(c.Value, Chr(10), vbNullString)) & " Linebreak(s)" 
End Sub 

换行符可以用一个0长度的字符串被替换的未调节细胞的长度除去换行符[更新; Not a linebreak!]

正如Sid在Get first two lines of text from a wraped cell in excel中指出的那样,如果使用字体大小(可以更改),这是非常棘手的。

我认为最万无一失的方法是将单元格的内容复制到其他地方(到否则空白行),并基于该细胞得到高度自动调整该行。

+0

这类似于这个问题的http:// stackoverflow.com/questions/9889002/get-first-two-lines-of-text-from-a-wraped-cell-in-excel/9897363#comment12631761_9897363。如果文本没有换行符(CHR10)+1,那么很多东西都必须考虑,尽管此方法适用于由换行符分隔的行:) – 2012-03-28 08:16:30

+1

@SiddharthRout公平点。虽然基于相同的问候前问题http://stackoverflow.com/a/9902628/641067我认为这是linebreak相关的。啊哈! – brettdj 2012-03-28 09:04:03

+0

啊!是的,你是对的:) – 2012-03-28 09:07:22