Link to home
Start Free TrialLog in
Avatar of DekkaG
DekkaG

asked on

How do you close PowerPoint 2007 using VBA

I am trying to close MS Powerpoint (2007) from vba in another presentation where i don't save the presentation.
What is the code I am supposed to run to close. When I close the presentation manually, ppt crashes.

Any suggestions or code are greatly welcome.
Thanks...
Avatar of game-master
game-master
Flag of Philippines image



good morning!

have you tried application.quit



game-master
Avatar of DekkaG
DekkaG

ASKER

I don't want to quit the application. Just the presentation. I have another presentation open in the app.


try this one....

SlideShowWindows(Index:=1).View.Exit


this will close the specific presentation
Avatar of DekkaG

ASKER

i got the following run time error:
-2147188160 (80048240)
slideshowwindows(unknown member): integer out of range. 1 is not in the valid range of 1 to 0.

Never seen this one before. I would have thought that 1 is in that range....

Getting close i'm feeling....


can u post your code?

change the index number '1' to the index number of your slide..

SlideShowWindows(Index:=1).View.Exit



game-master


try this one...

If SlideShowWindows.Count > 0 Then
        SlideShowWindows(SlideShowWindows.Count).View.Exit
    End If

the error occur when your trying to exit the slideshow but either there no
active slideshow or your having an incorrect index..


game-master
Avatar of John Wilson
Try

Presentations("name.pptx").Close

Obviously substitue the name of the actual presentation.
Avatar of DekkaG

ASKER

I am attaching the code I am using right now. Hopefully this will help.
JSRWilson, I have tried using that method but a dialog box opens up to ask me whether i want to save the file. Is there a way to say no or not have that box pop up?


Sub PullExcelData()
    
    mbErrorSwitch = False
    Set objWorksheet = objWorkbook.Worksheets("QueryMap")
    PresName = objWorksheet.Range("nrPresName").Value
    strPresPath = WKBKPATH & PresName
    oPPTObjName = objWorksheet.Range("nrObjName").Value
    
    Application.DisplayAlerts = False
    
    'Open the presentation
    Presentations.Open (strPresPath)
    'Set oPPTApp = CreateObject("Powerpoint.Application")
    Set objPresentation = ActivePresentation
    Set objSlide = objPresentation.Slides(1)
    
'    Set objexcel = CreateObject("Excel.Application")
'    objexcel.Visible = False
    
'    Set objWorkbook = objexcel.Workbooks.Open(ActivePresentation.Path & "\Connection Script1.2.xlsm")
    Set objWorksheet = objWorkbook.Worksheets("Main")
    Set objRange = objWorksheet.Range("nrMainCopyRange")
    
    'Instantiate the workbook object from the OLE object
    Set objExcelDestWb = objSlide.Shapes(oPPTObjName).OLEFormat.Object
    
    'Define what worksheet to paste into
    Set objExcelDestSheet = objExcelDestWb.Worksheets(1)
    
    'Optionally clear destination sheet, depends what you are updating..
    objExcelDestSheet.Cells.ClearContents
    objWorksheet.Activate
    objRange.Copy
    
    'PASTE INTO EXCEL TABLE at cell A1
    objExcelDestSheet.Paste objExcelDestSheet.Range("A1")
        
   ' AutoFitColumns
    Dim mvgRng As Range
    With objExcelDestSheet
        .Columns("C:Z").AutoFit
    End With
    
    objExcelDestSheet.Range("A1").EntireColumn.ColumnWidth = 50
    Set mvgRng = objExcelDestSheet.Range("B1:Z1")
    
    For Each c In mvgRng.Cells
        
        If c.EntireColumn.ColumnWidth > 30 Then
            c.EntireColumn.ColumnWidth = 30
        Else: End If
    Next c
 
    objExcel.CutCopyMode = False
    Application.DisplayAlerts = True
        
    On Error Resume Next
    Set oPPTShape = objPresentation.Slides(1).Shapes("txtAsOfDate")
        Set objWorksheet = objWorkbook.Worksheets("SysConfig")
        oPPTShape.TextFrame.TextRange.Text = "As of " & objWorksheet.Range("nrCharDateDisplay").Value
    
    Set oPPTShape = objPresentation.Slides(1).Shapes("txtFootnote")
        Set objWorksheet = objWorkbook.Worksheets("Other")
        oPPTShape.TextFrame.TextRange.Text = objWorksheet.Range("nrFootnote").Value
    
'    oPPTApp.Visible = True
'    SlideCopy2
 
            Dim s As Slide
            Dim vt As Long
            
            On Error GoTo slideError
            
            Presentations.Add
            Set objPresentation2 = ActivePresentation
 
            vt = objPresentation2.Windows(1).ViewType
           objPresentation2.Windows(1).ViewType = ppViewOutline
            For Each s In objPresentation.Slides
                s.Copy
                Set cl = s.CustomLayout
                objPresentation2.Slides.Paste
                objPresentation2.Slides(objPresentation2.Slides.Count).CustomLayout = cl
            Next s
            objPresentation2.Windows(1).ViewType = vt
  
'    objPresentation.Windows(1).Activate
'    SlideShowWindows(Index:=1).View.Exit
'    objPresentation.Windows(1).Close
    
    
'    With Application.objPresentation
'        .Saved = True
'        .Close
'    End With
   
        Exit Sub
        
slideError:
     
End Sub

Open in new window

Set the Saved flag to True?

With Presentations("notestest.pptx")
.Saved = msoTrue
.Close
End With
Avatar of DekkaG

ASKER

JSRWilson,
I added that to the bottom of my code, but now PPT is totally crashing on the .Close

Here is the error i am getting.

Run-time error -2147417848 (80010108)
Automation Error
The object invoked has disconnected from its clients.
Avatar of DekkaG

ASKER

The only way i am able to do this is to save the file to my temp path. Then i can close the presentation without it crashing.
ASKER CERTIFIED SOLUTION
Avatar of ee_auto
ee_auto

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial