为何Shape.Width有时为整数有时为小数?VBA文本框尺寸取值咨询
你的VBA代码返回值忽整忽小的原因
你的代码本身没问题,问题出在两个地方:
单位转换的精度问题:VBA中
Shape.Width/Height/Top/Left返回的是当前文档设置的显示单位下的数值(可以在「文件→选项→高级→显示」里修改)。而Office内部始终用整数缇存储这些参数,所以当把缇数转换成显示单位时,就会出现“整数缇→整数/小数显示单位”的情况。MsgBox的自动格式化:MsgBox会自动判断数值的显示方式——如果数值是整数(比如5.0),它就会省略小数点和末尾的0,直接显示成5;如果是带有小数部分的数值(比如5.1234),就会显示对应的小数位数。这不是VBA读取的数值不稳定,只是MsgBox帮你做了简化显示。
你可以用下面的代码验证一下,强制显示四位小数,就能看到真实的精确数值:
Sub getShapeNow() With ActiveWindow.Selection.ShapeRange(1) MsgBox .Name MsgBox "Width: " & .Width & vbCrLf & "精确值: " & Format(.Width, "0.0000") MsgBox "Height: " & .Height & vbCrLf & "精确值: " & Format(.Height, "0.0000") MsgBox "Top: " & .Top & vbCrLf & "精确值: " & Format(.Top, "0.0000") MsgBox "Left: " & .Left & vbCrLf & "精确值: " & Format(.Left, "0.0000") End With End Sub
内容的提问来源于stack exchange,提问作者Gerald Tow
相关产品推荐
相关产品推荐

