VBA代码大全029:如何用vba修改excel单元格区域range对象的行高和列宽?

在excel中单个单元格的行高和列宽是与单元格所在的行的行高和单元格所在列的列宽一致的。

我们无法单独修改某个单元格的行高或列宽,只能通过修改单元格所在行的行高和所在列的列宽来实现单个单元格的行高和列宽的修改。

vba的Range对象中与高度相关的属性有RowHeightHeight,与宽度相关的属性有WidthColumnWidth

其中Height属性返回的是以points为单位的单元格的高度,Width属性返回的是以points为单位的单元格的宽度。

根据上文的解释,在vba中只能读取单个单元格Range对象的Height属性和Width属性,无法修改它们的值。

以下代码进行了举例说明:

Sub QQ1722187970()
    '读取A1单元格的Width和Height属性值
    Debug.Print Range("a1").Width, Range("a1").Height
    '读取A1:C2单元格的Width和Height属性值
    Debug.Print Range("a1:c2").Width, Range("a1:c2").Height
    '以下设置A1单元格或A1:C2单元格区域的Width和Height属性值的语句将会出错
     Range("a1").Width = 100
     Range("a1").Height = 100
     Range("a1:c2").Width = 300
     Range("a1:c2").Height = 200
End Sub

如果要设置单元格的行高,可以使用Range对象的RowHeight属性。

比如要设置单元格A1的行高为100 points,可以直接使用如下的语句:

Range("a1").RowHeight = 100

如果要同时设置单元格区域所在的所有行的行高为统一值,也可以使用如下的语句:

 Range("a1:C10").RowHeight = 100

这样第1行到第10行的单元格行高都设置成了100 points。

但是当返回单元格区域的RowHeight属性时,只返回单元格区域的第一行的行高,比如语句:

 Debug.Print Range("a1:c10").RowHeight

在立即窗户中输出的是A1单元格所在行的行高。

如果要设置单元格的列宽,可以使用Range对象的ColumnWidth属性。

ColumnWidth与上文中提到的Height、Width、RowHeight 有个本质的不同。

ColumnWidth属性的值并不是以points为单位,1个单位的列宽等于在Normal样式下的1个字符的宽度。

这也是为什么把ColumnWidth属性和RowHeight属性的值设置为了同一值后,单元格还不是正方形的原因。

其它用法与RowHeight属性是类似的:

比如要设置单元格A1的列宽为100个字符宽度,可以直接使用如下的语句:

Range("a1").ColumnWidth = 100

如果要同时设置单元格区域所在的所有列的列宽为统一值,也可以使用如下的语句:

Range("a1:C10").ColumnWidth = 100

这样A列到C列的列宽都设置成了100 个字符宽度。

但是当返回单元格区域的ColumnWidth属性时,只返回单元格区域的第1列的列宽,比如语句:

Debug.Print Range("a1:c10").ColumnWidth

在立即窗户中输出的是A1单元格所在列的列宽。

       

发表评论