Is there a macro that would seek out all symbols in a document and revert them all to objects? I believe the symbols are really bogging down my file and there are too many at this point to find them. Thanks.
Are these supposed to jump to each page?
no only on current page
for all pages on active document try code below
Sub RevertSymbolsToObjects()Dim sh As ShapeRange, s As Shape, dp As PageActiveDocument.BeginCommandGroup ("RevertToOjects")For Each dp In ActiveDocument.Pagesdp.ActivateSet sh = ActivePage.Shapes.FindShapes(Type:=cdrSymbolShape)For Each s In shs.Symbol.RevertToShapesNext sNext dpActiveDocument.EndCommandGroupEnd Sub
Was it still super-slow to process that one page?
If I might ask, how many pages does your document have?
88 pages. No it was fast. Only one symbol on this particular page.
I would try it on a few more challenging pages.
You could "go for the gold" with an all-pages attempt:
Sub RevertSymbols_all_pages() Dim p As Page Dim s As Shape Dim sr As ShapeRange On Error GoTo ErrHandler ActiveDocument.BeginCommandGroup "revert symbols all pages" EventsEnabled = False Optimization = True For Each p In ActiveDocument.Pages Set sr = p.Shapes.FindShapes(Query:="@type = 'symbol'") For Each s In sr.Shapes s.Symbol.RevertToShapes Next s Next p ExitSub: Optimization = False EventsEnabled = True ActiveDocument.EndCommandGroup Exit Sub ErrHandler: MsgBox "Error occurred: " & Err.Description Resume ExitSub End Sub
Or, you could try to process just a subset of the document at one time with something like this:
Sub RevertSymbols_some_pages() Dim lngPageIndex As Long Dim p As Page Dim s As Shape Dim sr As ShapeRange On Error GoTo ErrHandler ActiveDocument.BeginCommandGroup "revert symbols some pages" EventsEnabled = False Optimization = True For lngPageIndex = 1 To 5 Set p = ActiveDocument.Pages(lngPageIndex) Set sr = p.Shapes.FindShapes(Query:="@type = 'symbol'") For Each s In sr.Shapes s.Symbol.RevertToShapes Next s Next lngPageIndex ExitSub: Optimization = False EventsEnabled = True ActiveDocument.EndCommandGroup Exit Sub ErrHandler: MsgBox "Error occurred: " & Err.Description Resume ExitSub End Sub
Sometimes you may run into a problem where some specific content gives CorelDRAW trouble.
Other times, you may have something where it works OK for doing a modest amount of work at one time, but cannot successfully process the whole document. One might even have to process part of it, then save the file and close / restart CorelDRAW before doing another part of it.
It took about 5 minutes to process 5 pages. There were maybe two symbols on any of those pages in total.
You can edit the line:
For lngPageIndex = 1 To 5
to process a different set of pages in the document.
That's a little bit painful, but it has the benefit that, if you have success, you can at least save your document and have part of the job done!
You might check, as you did earlier, to see if it's going crazy with memory use.
How complicated are the symbols?
Nothing crazy. Mostly hardware.
I guess I am wondering - even aside from automation - why the reverting of symbols to regular shapes is so slow.
Any chance that this is some of the nasty AMD video card / Windows 10 Creators Update performance problems some users have experienced with CorelDRAW?
I know that some of your information is proprietary. Could you share one of the symbols that takes ~5 minutes to revert?
If you create a new symbol - something simple - then is that also very slow to revert?
Try this. My document isn't any better.
drive.google.com/open
Thank you.
If I load that library locally, then drag one of those symbols onto the page and then revert to objects, the revert operation takes ~2 seconds.
VIDEO: revert symbols manually
I also tried it on a single page using the macro. I've made a small change to the macro, adding a "refresh" at the end. That won't change the performance, but it causes the Object Manager to update. Again, about 2 seconds per symbol.
VIDEO: revert symbols using macro
I then dragged all 31 of the symbols out, distributing them across four pages. Running the "all pages" macro took ~62 seconds. So, still about two seconds per symbol, on the average.
VIDEO: revert symbols using macro, multiple pages
It seems to me that the memory use goes up, up, up when one reverts symbols.
Opening a file with those 31 symbols in it, Task Manager showed 0.27 GB for memory.
After manually (no VBA macro) reverting those symbols, the Task Manager was showing 2.29 GB.
It seems to be even more dramatic when doing it with the VBA macro. I set up a 100-page document with 310 of those symbols distributed through it, and it maxed out the 16 GB of physical memory I have on the machine I'm using.
I DID get that document to process all the way through by setting up the macro so that it would:
until all pages of the document had been processed. Closing / reopening frees up some of the memory that has been used.