使用 AddShape 方法时,不会在参数指定的位置生成形状

Using the AddShape method, the shape is not generated at the position specified by the argument

提问人:Masaaki Satoh 提问时间:11/16/2023 最后编辑:Masaaki Satoh 更新时间:11/16/2023 访问量:80

问:

当我们使用 AddShape 方法生成形状时,我们遇到了麻烦,因为位置可能会移动。此外,结果似乎因所使用的设备而异。

以下是测试代码及其结果。

我们如何在指定为参数的位置稳定地生成形状?

测试代码 (Excel VBA)

结果日志 Resutl 形状

Public Sub CreareShapes()
    ' Variables
    Dim c As Range: Set c = Sheet1.Range("A1")
    Dim d As Range: Set d = Sheet2.Range("A1")
    Dim s As Shape
    Dim i As Long
    Dim coefficient As Long: coefficient = 29
    Dim leftPosition As Double
        
    ' Create title for log
    Sheet2.Cells.Clear
    d.Value = "IN"
    d.Offset(ColumnOffset:=1).Value = "OUT"
    d.Offset(ColumnOffset:=2).Value = "DIFF"
    
    Set d = d.Offset(1)
    
    ' Clear shapes
    For Each s In Sheet1.Shapes
        s.Delete
    Next
    
    ' Create shapes
    For i = 1 To 100
        ' Create shape
        leftPosition = c.Left + (c.Left + 1) / coefficient
        Set s = Sheet1.Shapes.AddShape(msoShapePentagon, leftPosition, c.Top, c.Width * 3, 10)
        
        ' Write logs
        d.Value = leftPosition '= IN
        d.Offset(ColumnOffset:=1).Value = s.Left '= OUT
        d.Offset(ColumnOffset:=2).Formula = "=A" & d.Row() & "-B" & d.Row() '= DIFF
        
        ' Move cursors
        Set c = c.Offset(1, 1)
        Set d = d.Offset(1)
    Next
End Sub

Ref. Shapes.AddShape 方法 (Excel)

https://learn.microsoft.com/en-us/office/vba/api/excel.shapes.addshape

参考图片

系数被注释掉的情况

Excel VBA

评论

0赞 taller 11/16/2023
位置转移在哪里?您的屏幕截图中没有。msoShapePentagon
0赞 Masaaki Satoh 11/16/2023
感谢您的回复。我添加了一个 msoShapePentagon 屏幕截图。
0赞 Masaaki Satoh 11/16/2023
我们要做的是在测试代码中变量“leftPosition”的位置生成一个形状。但是,我们遇到了麻烦,因为位置向左或向右移动。
0赞 taller 11/16/2023
是否意味着形状的左上角远离单元格的左上角?position shifts left or right
0赞 Masaaki Satoh 11/16/2023
唯一的问题是水平运动。垂直移动不是问题。

答: 暂无答案