PDA

View Full Version : [SLEEPER:] Remove Advance Slide on 300+ powerpoint files



abenitez77
01-12-2018, 06:48 AM
I have about 300 powerpoint files that have advance slide timer on them and I want to remove them so that it does not advance when I open them. How can I do this with vba, so i don't have to open each one individually to do this?

John Wilson
01-16-2018, 07:59 AM
IF you mean slides are set to advance on time not on click

Put a COPY of some of the files in a folder called PPTFILES on your desktop and try this code.


Sub Not_Auto()
Dim opres As Presentation
Dim strFile As String
Dim strFolder As String
Dim strSpec As String
Dim osld As Slide
strSpec = "*.pp*"
strFolder = Environ("USERPROFILE") & "/Desktop/PPTFILES/"
strFile = Dir$(strFolder & strSpec)
While strFile <> ""
Set opres = Presentations.Open(strFolder & strFile)
Set osld = opres.Slides(1)
osld.Select
If Not CommandBars.GetPressedMso("SlideTransitionOnMouseClick") Then _
CommandBars.ExecuteMso ("SlideTransitionOnMouseClick")
DoEvents
If CommandBars.GetPressedMso("SlideTransitionAutomaticallyAfter") Then _
CommandBars.ExecuteMso ("SlideTransitionAutomaticallyAfter")
DoEvents
CommandBars.ExecuteMso ("SlideTransitionApplyToAll")
DoEvents
opres.Save
opres.Close
strFile = Dir()
Wend
End Sub

abenitez77
01-16-2018, 03:20 PM
IF you mean slides are set to advance on time not on click

Put a COPY of some of the files in a folder called PPTFILES on your desktop and try this code.


Sub Not_Auto()
Dim opres As Presentation
Dim strFile As String
Dim strFolder As String
Dim strSpec As String
Dim osld As Slide
strSpec = "*.pp*"
strFolder = Environ("USERPROFILE") & "/Desktop/PPTFILES/"
strFile = Dir$(strFolder & strSpec)
While strFile <> ""
Set opres = Presentations.Open(strFolder & strFile)
Set osld = opres.Slides(1)
osld.Select
If Not CommandBars.GetPressedMso("SlideTransitionOnMouseClick") Then _
CommandBars.ExecuteMso ("SlideTransitionOnMouseClick")
DoEvents
If CommandBars.GetPressedMso("SlideTransitionAutomaticallyAfter") Then _
CommandBars.ExecuteMso ("SlideTransitionAutomaticallyAfter")
DoEvents
CommandBars.ExecuteMso ("SlideTransitionApplyToAll")
DoEvents
opres.Save
opres.Close
strFile = Dir()
Wend
End Sub

Will this run on a MAC?

John Wilson
01-17-2018, 01:16 AM
No, but did you say you had a mac?

abenitez77
01-17-2018, 04:56 AM
I think it's obvious I did not, but I guess I should have. So the now obvious question is, is there a way to do what I want on a MAC or do i need to move the files to a pc and run it there then copy the files back?

John Wilson
01-17-2018, 05:04 AM
You should have and then I wouldn't have wasted an hour!

On a Mac I think you would need to use AppleScript but I am not a Mac programmer.

If you have a PC I would try it there with a few files only to start with.

abenitez77
01-17-2018, 09:43 AM
You should have and then I wouldn't have wasted an hour!

On a Mac I think you would need to use AppleScript but I am not a Mac programmer.

If you have a PC I would try it there with a few files only to start with.

John, your time is not wasted. I will be copying the files to a laptop with windows and using your code, then copying the files back to the mac. I am not a mac programmer either.

Thanks for your expertise and time!

Aussiebear
05-06-2025, 03:28 PM
Perhaps this applescript might be useful?



tell application "Microsoft PowerPoint"
set target_folder to choose folder with prompt "Select the folder containing your PowerPoint files:"
set powerpoint_files to (get every file of target_folder whose name ends with ".pptx" or name ends with ".ppt")
repeat with a_file in powerpoint_files
open a_file
tell the active presentation
set slide_count to the count of slides
repeat with i from 1 to slide_count
set the_slide to slide i
tell the slide transition of the_slide
set automatically advance after to 0 -- Set automatic advance time to zero
set advance on mouse click to true -- Ensure it advances on mouse click
end tell
end repeat
save
close saving yes
end tell
end repeat
end tell

Aussiebear
05-06-2025, 03:44 PM
and finally as a possible update to John's method...


Sub DisableAutoAdvanceForAllSlides()
Dim opres As Presentation
Dim strFile As String
Dim strFolder As String
Dim strSpec As String
Dim osld As Slide
' Specify the file pattern to find PowerPoint files
strSpec = "*.pp*"
' Specify the folder containing the PowerPoint files
strFolder = Environ("USERPROFILE") & "\Desktop\PPTFILES\"
' Get the first file matching the pattern in the folder
strFile = Dir$(strFolder & strSpec)
' Loop through all matching files in the folder
While strFile <> ""
On Error Resume Next ' Enable error handling for opening files
Set opres = Presentations.Open(strFolder & strFile)
On Error GoTo 0 ' Disable error handling after attempting to open
' Check if the presentation was opened successfully
If Not opres Is Nothing Then
' Loop through each slide in the presentation
For Each osld In opres.Slides
With osld.SlideShowTransition
' Disable automatic advance
.AdvanceOnTime = False
.AdvanceAfterTime = 0
' Ensure advance on mouse click is enabled (optional, but good practice)
.AdvanceOnClick = True
End With
Next osld
' Save the changes opres.Save
' Close the presentation
opres.Close
Else
' Inform the user if a file could not be opened
Debug.Print "Could not open file: " & strFolder & strFile
End If
' Get the next file matching the pattern
strFile = Dir$()
Wend
MsgBox "Automatic slide advance has been disabled for all PowerPoint files in the specified folder.", vbInformation
End Sub