为什么Range.ColumnWidth的单位与点或厘米都不匹配(使用默认单位)

joe*_*elc 5 excel vba column-width excel-vba access-vba

我正在Access数据库中生成VBA子例程,该例程会生成Excel文件,但是当我使用以下方法修改列宽时:

Range("A:A").ColumnWidth = ...
Run Code Online (Sandbox Code Playgroud)

根据测量单位产生混合结果。Excel在选项中设置的默认度量是厘米。我尝试输入以点和厘米为单位的值,但是结果太宽或太小(请参见下文):

Range("A:A").ColumnWidth = 3.07 'In Centimeters - Too small
Range("A:A").ColumnWidth = 87.02 'In Points - Too big
Run Code Online (Sandbox Code Playgroud)

根据文档 Range.ColumnWidth ,以点为计量单位(宽度为0)进行设置。无论我输入什么值,结果都不一样。

Dic*_*ika 5

.ColumnWidth属性是指您可以使用默认字体在单元格中键入的零个数,而不会超出该单元格的宽度。

在一个新的工作簿中,假设您的默认列宽为8.43,请键入'000000000一个单元格,您会看到第9个零点溢出了右侧的单元格边框大约为零。

要以点为单位设置像元宽度,请将.ColumnWidth设置为points / cell.Width * cell.ColumnWidth。这是要解决的问题,您必须将它设置三下才能使其接近,但几乎永远不会准确。因此,将.ColumnWidth分配放入For Next循环中,并将其设置三遍。

请注意,.Width属性以磅为单位,您无法进行设置。.ColumnWidth属性采用crazy-zero-width-measurement,您可以进行设置。我不知道为什么要花三遍。

请参阅http://dailydoseofexcel.com/archives/2004/06/01/column-widths-in-points/了解有关“三倍”情况的一些测试结果。

  • `RowHeight` 和你所期望的一样,`ColumnWidth` 是一种完全出乎意料的、不寻常的、甚至没有任何警告或解释的精确格式……Excel 团队中的某个人在那个年代一定有一种非常残酷的幽默感。谢谢你的解释,让我头疼了! (3认同)