Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Automating Excel via PowerPoint - Locals window not exposing full Object model (ie Linksources)

background

I am running code (from PowerPoint) that:

  • Loops through every slide in a presentation.
  • Checks each shape to determine if it is a chart.
  • If it is a chart, activate the underlying Excel worksheet, and then change the links in this underlying file to a new source.

I note that the links to excel do not exist at the overall PPT level [viaInfo], they are deliberately linked to each chart so that the presentation can be edited without access to the source excel file.

The code works - broadly.

There is an ongoing error (code running fine now) that I think goes to network and memory stability (fails after around 15 charts), and I am looking to turn off screenupdating as per Turn off screenupdating for Powerpoint.

question

All the charts I access are linked to other workbooks. Yet when the Excel workbook is exposed to PowerPoint the Linksources are not shown in the Locals window even though the code processes each link (image below shows the link exists)

I flipped the automation to access the PowerPoint pack from Excel, same result. No Linksources.

Why would the full object model not also be available in the Locals window when automating PowerPoint with Excel?

Is this a localised glitch I have stumbled over, or is it a broader issue?

The picture below shows the code itearying over the links (ppl variable, but the xlWB variable has no Linksources).

enter image description here

code

Sub FastUpdate()

    Dim sld As Slide
    Dim shp As Shape
    Dim pptchrt As Chart
    Dim pptChrtData As ChartData

    Dim xlWB As Excel.Workbook
    Dim lngStart As Long
    Dim strNew As String
    Dim strMsg As String

    Dim ppl As Variant

    On Error GoTo cleanup
    'set start position manually 
    'lngStart = 34
    If lngStart = 0 Then lngStart = 1

    'call custom function for user to pick file
    'strNew = Getfile
     strNew = "S:\Corporate Model\05 RSM submissions\05 May 2016\02 Checked RSMs\VFAT\Australia\Australia - Valuation and Financial Analysis template.xlsx"


        For Each sld In ActivePresentation.Slides
            If sld.SlideIndex >= lngStart Then
                For Each shp In sld.Shapes
                    If shp.HasChart Then
                    Set pptchart = shp.Chart
                    Set pptChrtData = pptchart.ChartData
                    'open underlying excel file - doesn't just activate chart
                    pptChrtData.Activate
                    '
                    Set xlWB = pptChrtData.Workbook

                    'loop through all links
                    For Each ppl In xlWB.LinkSources
                        strMsg = strMsg & SlideNumber & " " & pptchart.Name & vbNewLine
                        xlWB.ChangeLink ppl, strNew
                    Next

                    xlWB.Close True
                    Set xlWB = Nothing
                    End If
                Next shp
            End If
        Next sld

cleanup:
Set xlWB = Nothing
If Err.Number <> 0 Then MsgBox Err.Description, vbCritical
If Len(strMsg) > 0 Then MsgBox strMsg, vbOKOnly, "Completed"
End Sub
like image 684
brettdj Avatar asked Oct 19 '22 08:10

brettdj


1 Answers

Locals and Watch windows show properties of objects. List of properties of Workbook object can be found here.

LinkSources is a method with optional Type parameter.

If you want to debug LinkSources you can add it to Watch window: enter image description here

or save return value to local variant variable to see it in Locals window.

like image 91
BrakNicku Avatar answered Nov 11 '22 15:11

BrakNicku