Skip to main content
rombanks
Inspiring
January 30, 2018
Answered

Deleting an xref format from a book

  • January 30, 2018
  • 1 reply
  • 790 views

Hello fellows,

I need a framescript that deletes a specific xref format (e.g., "API") from a book. So I've decided to write one for the sake of practice.

I came up with the following code. When running it on a book, for some unclear reason it complains: "Missing Object on command (Loop) at Line (11). So far, it's unclear to me what the issue is. Any input will be appreciated!

If ActiveBook = 0

MsgBox 'There is no active book.';

LeaveSub;

Else

Set vCurrentBook = ActiveBook;

    Set vDoc = vCurrentBook.BookComponent;

EndIf

Loop ForEach(vDoc) In(vCurrentBook) LoopVar(vCompobj) //This is the line FM complains about.

    Open Document File(vCompobj.Name) NewVar(vDocObj) FileIsOldVersion FontNotFoundInDoc RefFileNotFound(AllowAllRefFilesUnFindable) AlertUserAboutFailure(false);

    Set vDocObj = ActiveDoc;

    Set vDocObj.ShowAll = 1;

    Set vXrefFmt = vDocObj.FirstXRefFmtInDoc;

    Loop While (vXrefFmt)

        If vXrefFmt.Name==='API'

            Set vXrefFmtToDelete = vXrefFmt;

            Delete Object(vXrefFmtToDelete);

            LeaveLoop;

        Else

            Set vXrefFmt = vXrefFmt.NextXRefFmtInDoc;

        EndIf

    EndLoop

    Save Document DocObject(vDocObj);

    Close Document DocObject(vDocObj);

EndLoop

This topic has been closed for replies.
Correct answer frameexpert

Try putting in

Display vCurrentBook.BookComponent;

and you will see that BookComponent is not a valid property of a Book object.

Also, if you look up the Loop ForEach command in the FrameScript Reference Manual you will see that there are a limited number of object names that you can use in the ForEach parameter. You have to use one of the object names (like BookComponent) and not a variable like you were trying to do.

I hope this helps.

1 reply

frameexpert
Community Expert
Community Expert
January 30, 2018

Line 11 should be

Loop ForEach(BookComponent) In(vCurrentBook) LoopVar(vCompobj)

I didn't test the rest of the script.

www.frameexpert.com
rombanks
rombanksAuthor
Inspiring
January 31, 2018

Thank you, Rick!

I wonder why vDoc = vCurrentBook.BookComponent isn't right in this case. It's basically the same object.

Best Regards,

Roman

frameexpert
Community Expert
frameexpertCommunity ExpertCorrect answer
Community Expert
January 31, 2018

Try putting in

Display vCurrentBook.BookComponent;

and you will see that BookComponent is not a valid property of a Book object.

Also, if you look up the Loop ForEach command in the FrameScript Reference Manual you will see that there are a limited number of object names that you can use in the ForEach parameter. You have to use one of the object names (like BookComponent) and not a variable like you were trying to do.

I hope this helps.

www.frameexpert.com