'// Attribute VB_Name = "剪贴板尺寸建立矩形"
Type Coordinate
    x As Double
    y As Double
End Type
Public O_O As Coordinate

Sub start()
    '// 坐标原点
    O_O.x = 0:   O_O.y = 0
    Dim ost As ShapeRange
    Set ost = ActiveSelectionRange

    O_O.x = ost.LeftX
    O_O.y = ost.BottomY - 50    '选择物件 下移动 50mm

    '// 建立矩形 Width  x Height 单位 mm
    ' Rectangle 101, 151
    Dim Str, arr, n
    Str = GetClipBoardString

    ' 替换 mm x * 换行 TAB 为空格
    Str = VBA.Replace(Str, "mm", " ")
    Str = VBA.Replace(Str, "x", " ")
    Str = VBA.Replace(Str, "*", " ")
    Str = VBA.Replace(Str, Chr(13), " ")
    Str = VBA.Replace(Str, Chr(9), " ")
    
    Do While InStr(Str, "  ") '多个空格换成一个空格
        Str = VBA.Replace(Str, "  ", " ")
    Loop
    arr = Split(Str)
    
    ActiveDocument.BeginCommandGroup  '一步撤消'
    Dim x As Double
    Dim y As Double
    For n = LBound(arr) To UBound(arr) - 1 Step 2
        ' MsgBox arr(n)
        x = Val(arr(n))
        y = Val(arr(n + 1))
        
        If x > 0 And y > 0 Then
            Rectangle x, y
            O_O.x = O_O.x + x + 30
        End If
    Next
    ActiveDocument.EndCommandGroup
End Sub

Private Function Rectangle(Width As Double, Height As Double)
    ActiveDocument.Unit = cdrMillimeter
    Dim size As Shape
    Dim d As Document
    Dim s1 As Shape

    '// 建立矩形 Width  x Height 单位 mm
    Set s1 = ActiveLayer.CreateRectangle(O_O.x, O_O.y, O_O.x + Width, O_O.y - Height)
    
    '// 填充颜色无,轮廓颜色 K100,线条粗细0.3mm
    s1.Fill.ApplyNoFill
    s1.Outline.SetProperties 0.3, OutlineStyles(0), CreateCMYKColor(0, 100, 0, 0), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#
        
    sw = s1.SizeWidth
    sh = s1.SizeHeight

    Text = Trim(Str(sw)) + "x" + Trim(Str(sh)) + "mm"
    Set d = ActiveDocument
    Set size = d.ActiveLayer.CreateArtisticText(O_O.x + sw / 2 - 25, O_O.y + 10, Text)  '// O_O.y + 10  标注尺寸上移 10mm
    size.Fill.UniformColor.CMYKAssign 0, 100, 100, 0
End Function

Private Function setRectangle(Width As Double, Height As Double)

    Dim s1 As Shape
    Set s1 = ActiveSelection
    ActiveDocument.Unit = cdrMillimeter
    '// 物件中心基准, 先把宽度设定为
    ActiveDocument.ReferencePoint = cdrCenter
    s1.SetSize Height, Height

    '// 物件旋转 30度,轮廓线1mm ,轮廓颜色 M100Y100
    s1.Rotate 30#
    s1.Outline.SetProperties 1#
    s1.Outline.SetProperties Color:=CreateCMYKColor(0, 100, 100, 0)

End Function

Private Function GetClipBoardString() As String
    On Error Resume Next
    Dim MyData As New DataObject
    GetClipBoardString = ""
    MyData.GetFromClipboard
    GetClipBoardString = MyData.GetText
    Set MyData = Nothing
End Function