arrange.bas 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. '// CorelDRAW 物件排列拼版简单代码
  2. Sub arrange()
  3. On Error GoTo ErrorHandler
  4. ActiveDocument.Unit = cdrMillimeter
  5. row = 3 ' 拼版 3 x 4
  6. List = 4
  7. sp = 0 '间隔 0mm
  8. Dim Str, arr, n
  9. Str = GetClipBoardString
  10. ' 替换 mm x * 换行 TAB 为空格
  11. Str = VBA.Replace(Str, "mm", " ")
  12. Str = VBA.Replace(Str, "x", " ")
  13. Str = VBA.Replace(Str, "*", " ")
  14. Str = VBA.Replace(Str, Chr(13), " ")
  15. Str = VBA.Replace(Str, Chr(9), " ")
  16. Do While InStr(Str, " ") '多个空格换成一个空格
  17. Str = VBA.Replace(Str, " ", " ")
  18. Loop
  19. arr = Split(Str)
  20. Dim x As Double
  21. Dim y As Double
  22. x = Val(arr(0))
  23. y = Val(arr(1))
  24. If UBound(arr) > 2 Then
  25. row = Val(arr(2)) ' 拼版 3 x 4
  26. List = Val(arr(3))
  27. If UBound(arr) > 3 Then
  28. sp = Val(arr(4)) '间隔
  29. End If
  30. End If
  31. Dim s1 As Shape
  32. '// 建立矩形 Width x Height 单位 mm
  33. Set s1 = ActiveLayer.CreateRectangle(0, 0, x, y)
  34. '// 填充颜色无,轮廓颜色 K100,线条粗细0.3mm
  35. s1.Fill.ApplyNoFill
  36. s1.Outline.SetProperties 0.3, OutlineStyles(0), CreateCMYKColor(0, 100, 0, 0), ArrowHeads(0), _
  37. ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#
  38. sw = x
  39. sh = y
  40. '// StepAndRepeat 方法在范围内创建多个形状副本
  41. Dim dup1 As ShapeRange
  42. Set dup1 = s1.StepAndRepeat(row - 1, sw + sp, 0#)
  43. Dim dup2 As ShapeRange
  44. Set dup2 = ActiveDocument.CreateShapeRangeFromArray _
  45. (dup1, s1).StepAndRepeat(List - 1, 0#, (sh + sp))
  46. Exit Sub
  47. ErrorHandler:
  48. MsgBox "记事本输入数字,示例: 50x50 4x3 ,复制到剪贴板再运行工具!"
  49. On Error Resume Next
  50. End Sub
  51. Private Function GetClipBoardString() As String
  52. On Error Resume Next
  53. Dim MyData As New DataObject
  54. GetClipBoardString = ""
  55. MyData.GetFromClipboard
  56. GetClipBoardString = MyData.GetText
  57. Set MyData = Nothing
  58. End Function