我想在Excel中获得准确的Shape位置。我注意到Shape.Top受到Windows显示缩放设置的干扰。
要重现该错误,请右键单击工作表名称>查看代码>,然后将VBA代码粘贴到工作表VBA编辑器中。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
On Error Resume Next
ThisWorkbook.ActiveSheet.Shapes("BlueRectangle").Delete
Dim sh As Object
Set sh = ThisWorkbook.ActiveSheet.Shapes.AddShape(msoShapeRectangle, ActiveCell.Left, ActiveCell.Top, ActiveCell.Width, ActiveCell.Height)
sh.Name = "BlueRectangle"
End Sub
此代码在双击单元格中创建Rectange形状。只要Windows设置的显示缩放设置为100%,一切正常。但是,当我们将Windows设置中的显示缩放更改为125%时,矩形的创建位置与活动单元格略有不同。每100行Excel的位置高度有1行不同。因此,当我单击A100单元格时,将在A99单元格中创建矩形。
我想更正位置矩形创建,以便考虑Windows缩放显示。
以下是我提出的相关不明显的挑战,这可能是回答这个问题的里程碑:Get Windows display zoom value
我无法重现你的问题。我正在使用150%,即使对于最后一个单元格,Excel中的定位也是正确的。
也没有什么需要纠正的。
但是您的代码可能存在一些问题:
ThisWorkbook.ActiveSheet
并使用Target.Parent
这是更可靠的。ActiveCell
并使用Target
,因为ActiveCell
可能尚未更改为您单击的单元格。 Target
是你doubleclicket不是ActiveCell
的单元格。尝试下一步。我怀疑DPI是问题,我怀疑这是一个与qazxsw ppi相关的问题。
ActiveCell