1
1

Arrange.bas 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. Attribute VB_Name = "Arrange"
  2. '// This is free and unencumbered software released into the public domain.
  3. '// For more information, please refer to https://github.com/hongwenjun
  4. '// Attribute VB_Name = "物件排列拼版" Arrange 2023.6.11
  5. '// CorelDRAW 物件排列拼版简单代码
  6. Public Function Arrange()
  7. On Error GoTo ErrorHandler
  8. API.BeginOpt
  9. ActiveDocument.Unit = cdrMillimeter
  10. row = 3 ' 拼版 3 x 4
  11. List = 4
  12. sp = 0 '间隔 0mm
  13. Dim Str, arr, n
  14. Str = API.GetClipBoardString
  15. ' 替换 mm x * 换行 TAB 为空格
  16. Str = VBA.Replace(Str, "mm", " ")
  17. Str = VBA.Replace(Str, "x", " ")
  18. Str = VBA.Replace(Str, "X", " ")
  19. Str = VBA.Replace(Str, "*", " ")
  20. '// 换行转空格 多个空格换成一个空格
  21. Str = API.Newline_to_Space(Str)
  22. arr = Split(Str)
  23. Dim s1 As Shape
  24. Dim X As Double, Y As Double
  25. If 0 = ActiveSelectionRange.Count Then
  26. X = Val(arr(0)): Y = Val(arr(1))
  27. row = Int(ActiveDocument.Pages.First.SizeWidth / X)
  28. List = Int(ActiveDocument.Pages.First.SizeHeight / Y)
  29. If UBound(arr) > 2 Then
  30. row = Val(arr(2)): List = Val(arr(3))
  31. If row * List > 8000 Then
  32. GoTo ErrorHandler
  33. ElseIf UBound(arr) > 3 Then
  34. sp = Val(arr(4)) '间隔
  35. End If
  36. End If
  37. '// 建立矩形 Width x Height 单位 mm
  38. Set s1 = ActiveLayer.CreateRectangle(0, 0, X, Y)
  39. '// 填充颜色无,轮廓颜色 K100,线条粗细0.3mm
  40. s1.Fill.ApplyNoFill
  41. s1.Outline.SetProperties 0.3, OutlineStyles(0), CreateCMYKColor(0, 100, 0, 0), ArrowHeads(0), _
  42. ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#
  43. '// 如果当前选择物件,按当前物件拼版
  44. ElseIf 1 = ActiveSelectionRange.Count Then
  45. Set s1 = ActiveSelection
  46. X = s1.SizeWidth: Y = s1.SizeHeight
  47. row = Int(ActiveDocument.Pages.First.SizeWidth / X)
  48. List = Int(ActiveDocument.Pages.First.SizeHeight / Y)
  49. End If
  50. sw = X: sh = Y
  51. '// StepAndRepeat 方法在范围内创建多个形状副本
  52. Dim dup1 As ShapeRange
  53. Set dup1 = s1.StepAndRepeat(row - 1, sw + sp, 0#)
  54. Dim dup2 As ShapeRange
  55. Set dup2 = ActiveDocument.CreateShapeRangeFromArray(dup1, s1).StepAndRepeat(List - 1, 0#, (sh + sp))
  56. ErrorHandler:
  57. API.EndOpt
  58. End Function