Hide PowerPoint presentation while VBA macro is running - vba

I have this macro that copies excel tables and charts to power point. However the power point has to be visible for it to work. Unfortunately when it is visible and while the code is running and user touches the slides the program crashes.
I use this code to hide the presentation.
Set pres = Papp.presentatjons.open(path + pptfilename, with window:=msofalse).
It works, unfortunately this code (below) which is needed, needs the window or presentation slide to be open to copy charts and tables to the presentation.
Set ppslide = pres.slides(Papp.activewindow.selection.sliderange.slideindex)
Is there a code that substitute the second code so that I could hide the presentation window while running the program ?

Have a look at http://skp.mvps.org/ppt00033.htm
The code there will help you, but does not allow me to post a copy here

Related

VBA for Powerpoint: Change Slide in One Powerpoint by Selecting Button in Another

I am a beginner at VBA.
I am designing a somewhat interactive Powerpoint presentation/s. I want to be able to have three separate Powerpoint presentations open that will link together. I have been trying (without success) to create, in VBA, code which will change the current displayed slide on one Powerpoint file by clicking a button in another. I can hyperlink to the set slide but this causes this slide to pop up on the same screen in which it is clicked, despite it being already open in another screen (I don't want this).
Thanks in advance for any help,
Holly
VBA uses an object model that is a huge hierarchy of attributes and functions that represent the application. You can use this model to view and update attributes to get text, resize, and modify the application. You should look at some tutorials to get you started. When editing your code, you can press F2 to see and explore this object model. You can press F8 to run your code line by line (debug mode) and see what is happening.
To your question, you can access the open presentations in the application.presentations object (https://learn.microsoft.com/en-us/office/vba/api/powerpoint.presentations). You could then use a presentation in that list and use the ActiveWindow.View.goToSlide function (https://learn.microsoft.com/en-us/office/vba/api/powerpoint.view.gotoslide). Here is a free tutorial that I've used in my VBA journey (https://www.tutorialspoint.com/vba/index.htm).
PowerPoint has a Presentations collection that contains all currently open presentations. You can get a reference to any of them via Presentations("name") where "name" is the filename of the presentation, sans extension.
So ... assuming you've got three presentations open, a.pptx, b.pptx, c.pptx you can do something like this:
Sub SlideChange()
With Presentations("c")
.SlideShowWindow.View.GotoSlide (3)
End With
End Sub
If you run the above in any of the presentations, it will change the slide show window displaying presentation c to the third slide.

PowerPoint VBA code not running unless VB editor opened first

I have a PowerPoint presentation which consists of a single slide and some VBA code. The code displays a dialog box (not inside the presentation) which configures the slide.
I need the code to be started when the presentation is started.
I found various suggestions and ended up going with
this one however I am getting inconsistent results!
If I do the following, in sequence, it works:
Open presentation in PowerPoint
Select Developer tab
Select Visual Basic (to open VBA editor)
Close VBA editor
Select Slide Show tab
Select From Beginning
However, if I skip steps 2-4, it does not! I.E.:
1. Open presentation in PowerPoint
2. Select Slide Show tab
3. Select From Beginning
It is almost as though Visual Basic support isn't even loading until the editor is opened.
I also tried adding a slide before my main one with an auto-transition immediately and again, no-go.
This is driving me insane as I need to get this deployed to the rest of my department.
Anyone have any ideas?
It's kind of a known problem.
OnSlideShowPageChange sometimes doesn't fire. To get around it, add any of the Active-X controls from the Developer tab to the first slide. Scoot it off the slide if you don't want it visible.
Somehow the control forces VBA to initialize, so events fire.
After I did this with your presentation, it fired off right away.

vba code for powerpoint

I have an Excel sheet for sales KPIs that is linked to a SQL database and set to refresh every 5 minutes.
I built a PowerPoint that displays in our sales office. I copied the pie charts from Excel, using the Link Data option. When I first build the PowerPoint, this works awesome. Every 5 minutes, when the Excel data updates from SQL, the PowerPoint automatically updates.
However, when I close Excel and PowerPoint and open it the next day, the pie charts in PowerPoint no longer maintain a dynamic link. In other words, I have to manually click on every chart (there are over 15 of them) and click Refresh Data. Even after I do that, the link is no longer dynamic -- it won't auto-update when the Excel chart changes.
To be clear, I have both documents open when this is happening.
I'm assuming there's a way to do this with VBA and would like help to write the code. Once PP is open, I want it to continuously auto-update every time Excel changes. It's okay if Excel has to be open to make this work.
Appreciate any help.
This is untested, but the idea is that whenever the worksheet is updated (changed) then this should update the links in the powerpoint file called KPIs.pptx.
It may need to pause the macro until the PPTX file is updated, then release the object.
Private Sub Worksheet_Change(ByVal Target as Range)
Dim objPPT as Object
objPPT = GetObject("C:\username\KPIs.pptx")
objPPT.UpdateLinks
'may need a pause here
onjPPT = Nothing
End Sub

How to use VBA in PowerPoint to open an embedded OLE object

I think this is a simple question, but I have spent days searching for an answer and nothing yet.
I have an OLE object embedded into a PowerPoint presentation (created using PPT 2010). I embedded it (a pdf file) through the insert>object>create from file>display as icon method, so that it displays as a little icon on a slide.
My goal is to open it on click of a shape, where the shape is on a different slide from the slide the pdf is on. The pdf is on slide 5, the trigger shape is on slide 6. The goal is to open it during slideshow viewing (and it must be done through VBA instead of animations for other reasons).
I thought the following would work:
Sub OpenMyDoc()
ActivePresentation.Slides(5).Shapes("My Doc").OLEFormat.DoVerb(1)
End Sub
I had assigned that macro as an on click "action" through the insert>links method.
I have also tried the following variations, with no luck (nothing happens at all when I click on the triggering shape):
ActivePresentation.SlideShowWindow.View.Slide.Shapes("My Doc").OLEFormat.DoVerb(1)
I also tried:
With SlideShowWindows(1).Presentation.Slides(5).Shapes("My Doc")
OLEFormat.DoVerb(1)
End With
I also tried:
ActivePresentation.Slides.Item(5).Shapes.Item("My Doc").OLEFormat.DoVerb(1)
Other macros (mostly message boxes) in the presentation, and on the same slide work, so I'm sure it's not a permissions or other setting issue.
I am using master slides, but can't seem to trace the problem to that.
You probably saw an error message when you ran your code; the error message explains the problem, though in somewhat Microsoftcryptic fashion. You can only activate OLE objects from Slide or Notes view.
Instead, you can do this:
ActivePresentation.Slides(1).Shapes(4).ActionSettings(1).Hyperlink.Follow
where Shapes(4) is hyperlinked to the PDF you want to launch.
[EDIT]
But since hyperlinking isn't an option, and since you have to be in slide view to activate the embedded object, this works here:
' Activate the presentation window
' You might need to make sure it's in normal view
ActivePresentation.Windows(1).Activate
' Launch the OLE object:
ActivePresentation.Slides(1).Shapes(1).OLEFormat.DoVerb (1)
' And immediately switch back to slide show view
SlideShowWindows(1).Activate

Connecting PowerPoint and Excel

How do I connect PowerPoint and Excel such that each slide in the PowerPoint slideshow shows the next Excel cell in the cell in column A of Excel?
Well, it's a bit of programming, but basically you'll want to:
Set a reference to Excel in
PowerPoint VBE.
Figure out where in PowerPoint you
want the Excel cell text to appear,
like a Title placeholder.
Create a SlideChange event in a
class and with with the slide
change, read the index of the slide
and map it to the next cell from an
array of cells.
Place that mapped index text in your
slide shape when the slide changes.
Create a sub that initializes that
fires the event monitoring - either
from a Ribbon button, manually from
F5 or via Auto_Open.
If you come back with code that you're having problems with, I'd be happy to consult further.