Udostępnij za pośrednictwem


Automating the Timeline Shapes: Part 2

My good buddy Bill (no, not G) ran into an oddity when trying to automate the timeline shape. After you drop a timeline master to the page and set the begin-and-end dates, the time scale markers do not get updated. The labels for the begin-and-end dates are updated correctly. When you drop a milestone marker and set its date, the timeline even positions it correctly. There just seems to be something different with the time scale markers. If you right-click on the timeline, click “Configure Timeline…”, and click OK, the time scale markers magically get refreshed.

So how do you do this in code? Never fear, it’s possible. I should have put this in the last entry, but it didn’t cross my mind. Thanks, Bill. All you have to do is call the Timeline solution’s add-on, ts.

If you inspect the Action row that corresponds with Timeline shape, you’ll notice the following formula in Action cell: RUNADDONWARGS(“ts”, “/cmd=3”). This is what brings up the Configure Timeline dialog. If you call this add-on in code while AlertResponse is turned on, the dialog won’t appear, but rather it will refresh the time scale markers. To call the add-on in code, use the Run method of the Addon object that corresponds with the “ts” add-on.

Here it is in VBA:

Public Sub TimelineTest()

   

    Dim theTimeline As Shape

    Dim theMilestone As Shape

    Application.AlertResponse = 1

    Set theTimeline = Application.ActiveWindow.Page.Drop( _

        Application.Documents.Item("TIMELN_M.VSS").Masters.ItemU("Block timeline"), _

        5.610236, 5.511811)

       

    theTimeline.CellsU("User.visBeginDate").FormulaU = _

        Application.ConvertResult("1/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

       

    theTimeline.CellsU("User.visEndDate").FormulaU = _

        Application.ConvertResult("12/31/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

   

  ' Refresh the timeline, here it is...

    Application.Addons("ts").Run "/cmd=3"

   

    Set theMilestone = Application.ActiveWindow.Page.Drop( _

        Application.Documents.Item("TIMELN_M.VSS").Masters.ItemU("Line milestone"), _

        5.610236, 5.511811)

   

    theMilestone.CellsU("User.visMilestoneDate").FormulaU = _

        Application.ConvertResult("7/1/2004", VisUnitCodes.visDate, VisUnitCodes.visInches)

   

    Application.AlertResponse = 0

   

End Sub

-Chris

This posting is provide “AS IS” with no warranties, and confers no rights.