Coreldraw Macros Better

Sub DeleteEmptyLayers()
  Dim L As Layer
  Dim i As Long
  Application.Freeze = True
  For i = ActiveDocument.Layers.Count To 1 Step -1
    Set L = ActiveDocument.Layers(i)
    If L.Shapes.Count = 0 Then L.Delete
  Next i
  Application.Freeze = False
  MsgBox "Empty layers removed."
End Sub

(Use a backup before running macros that delete or modify many objects.)

ActiveDocument.CustomProperties.Add "UserSetting", "1200"

Paste this code into the module:

Sub ChangeAllOutlinesToRed()
    ' This macro changes all objects on the active page to have a 1pt red outline
    Dim s As Shape
    Dim sr As ShapeRange
' Get all shapes on the active page
Set sr = ActivePage.Shapes.All
' Loop through each shape
For Each s In sr
    ' Set outline color to red (RGB 255,0,0)
    s.Outline.SetProperties Color:=CreateRGBColor(255, 0, 0), _
                             Width:=1
Next s
' Refresh the screen
ActiveWindow.Refresh
MsgBox "Done! " & sr.Count & " shapes updated."

End Sub

Let’s write a macro that selects all objects on the active page and changes their outline to 1pt red. coreldraw macros better

To make CorelDRAW macros truly better for a production environment, you must stop hard-coding values. If you have to open the Visual Basic for Applications (VBA) editor to change a diameter or a page count, the macro is not finished.

Implement InputBoxes and Custom Dialogs

Instead of hard-coding Dim Margin As Double = 0.25, use this:

Dim UserMargin As Double
UserMargin = CDbl(InputBox("Enter margin in inches:", "User Input", 0.25))

Better yet: Use a UserForm. Create a simple dialog box with: Sub DeleteEmptyLayers() Dim L As Layer Dim i

A macro with a dialog box turns a niche script into a tool your entire team can use without touching the backend code.


To truly understand the concept, here are three high-value macros that outperform manual work.

Nothing frustrates a designer more than a cryptic VBA error ("Object variable or With block variable not set"). It stops the workflow cold.

Professional macros never crash. They predict failure. (Use a backup before running macros that delete

Implement On Error Resume Next (carefully) and validation.

Example: A macro that adds a cut contour.

Sub AddCutContour()
    On Error GoTo ErrorHandler
If ActiveDocument Is Nothing Then
    MsgBox "Please open a document first.", vbExclamation
    Exit Sub
End If
If ActiveShape Is Nothing Then
    MsgBox "Please select an object.", vbExclamation
    Exit Sub
End If
' -- Proceed with macro logic --
ActiveShape.CreateOutline (0.02)
ActiveShape.Outline.Color.CMYKAssign 0, 0, 0, 100
Exit Sub

ErrorHandler: MsgBox "Could not add contour. Is the shape valid?", vbCritical End Sub

Why this is better: The user knows why the macro failed, and the program doesn't crash. Trust in automation comes from reliability, not features.