Jump to content

PowerPoint COM object trouble


Go to solution Solved by water,

Recommended Posts

Posted (edited)

I've been playing with this UDF

'?do=embed' frameborder='0' data-embedContent>>

but I only need a couple functions from the script and I'd like to avoid additional includes, so this is what I've done:

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

$objPPT.Visible = False
$objPPT.Presentations.Open(@ScriptDir&"\test.potx")
$objPPT.Shapes.AddTextBox(1,5,5,100,50)
$objPPT.Shapes.Item(1).TextFrame.TextRange.Text = "this is a test"
MsgBox(0,"","did it work?")
$objPPT.SaveAs("C:\Users\TEMP\Downloads\Output.ppt")
$objPPT.Quit

The parts that don't seem to work are:

$objPPT.Shapes.AddTextBox(1,5,5,100,50)
$objPPT.Shapes.Item(1).TextFrame.TextRange.Text = "this is a test"

and

$objPPT.Visible = False
 

and

$objPPT.SaveAs("C:UsersTEMPDownloadsOutput.ppt")
 

Does anyone have any idea what I'm doing wrong? Maybe someone can point me to a PPT COM object cheatsheet?

Also, How do I figure out what index things that are already on the PPT are?

Edited by Jewtus
Posted

 

The parts that don't seem to work are:

What do you mean by "don't work"? Error messages, return codes, script crash ...?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

 

Excellent! Thanks. I'll keep looking into this

What do you mean by "don't work"? Error messages, return codes, script crash ...?

 

It doesn't crash, nor do I get a return code. It just seems to skip over them... Is there a way to monitor the COM object so I can actually see what the returned error is?

I did update it and it does work a little bit better now:

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

$objPPT.Visible = False ;Doesn't work... window still shows up
$objPPT.Presentations.Open(@ScriptDir&"\test.potx") ; Works, PPT opens
$PPT=$objPPT.ActivePresentation.Slides(1)
With $PPT.Shapes.AddTextBox(1,5,5,100,50) ; Works, creates the text box
MsgBox(0,"","did it work?")
$objPPT.SaveAs ("C:\Users\TEMP\Downloads\Output.ppt") ; doesn't work, doesn't save the file
$objPPT.Quit ; works, closes powerpoint
Posted

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then Exit MsgBox(0,"","No PowerPoint available")
$objPPT.Visible = False ;Doesn't work... window still shows up
If @error Then Exit MsgBox(0,"","Visible. @error = " & @error & ", @extended = " & @extended)
$objPPT.Presentations.Open(@ScriptDir&"\test.potx") ; Works, PPT opens
If @error Then Exit MsgBox(0,"","Open. @error = " & @error & ", @extended = " & @extended)
$PPT=$objPPT.ActivePresentation.Slides(1)
If @error Then Exit MsgBox(0,"","Slides. @error = " & @error & ", @extended = " & @extended)
With $PPT.Shapes.AddTextBox(1,5,5,100,50) ; Works, creates the text box
If @error Then Exit MsgBox(0,"","AddTextBox. @error = " & @error & ", @extended = " & @extended)
MsgBox(0,"","did it work?")
$objPPT.SaveAs ("C:\Users\TEMP\Downloads\Output.ppt") ; doesn't work, doesn't save the file
If @error Then Exit MsgBox(0,"","SaveAs. @error = " & @error & ", @extended = " & @extended)
$objPPT.Quit ; works, closes powerpoint
If @error Then Exit MsgBox(0,"","Quit. @error = " & @error & ", @extended = " & @extended)

What do you get?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted (edited)

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then Exit MsgBox(0,"","No PowerPoint available")
$objPPT.Visible = False ;Doesn't work... window still shows up
If @error Then Exit MsgBox(0,"","Visible. @error = " & @error & ", @extended = " & @extended)
$objPPT.Presentations.Open(@ScriptDir&"\test.potx") ; Works, PPT opens
If @error Then Exit MsgBox(0,"","Open. @error = " & @error & ", @extended = " & @extended)
$PPT=$objPPT.ActivePresentation.Slides(1)
If @error Then Exit MsgBox(0,"","Slides. @error = " & @error & ", @extended = " & @extended)
With $PPT.Shapes.AddTextBox(1,5,5,100,50) ; Works, creates the text box
If @error Then Exit MsgBox(0,"","AddTextBox. @error = " & @error & ", @extended = " & @extended)
MsgBox(0,"","did it work?")
$objPPT.SaveAs ("C:\Users\TEMP\Downloads\Output.ppt") ; doesn't work, doesn't save the file
If @error Then Exit MsgBox(0,"","SaveAs. @error = " & @error & ", @extended = " & @extended)
$objPPT.Quit ; works, closes powerpoint
If @error Then Exit MsgBox(0,"","Quit. @error = " & @error & ", @extended = " & @extended)

What do you get?

I get a syntax error...

>Running AU3Check (3.3.10.2)  from:H:toolsAutoit - Portableautoit-v3install  input:C:UsersTEMPDesktopPPT_Example.au3

"C:UsersTEMPDesktopPPT_Example.au3"(39,90) : error: syntax error

If @error Then Exit MsgBox(0,"","Quit. @error = " & @error & ", @extended = " & @extended)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^

C:UsersTEMPDesktopPPT_Example.au3 - 1 error(s), 0 warning(s)

I commented out that line and the syntax error just moved up.

EDIT: I left a with in the wrong spot... got rid of the error syntax and used console write on the variable (so I could paste them here)

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

$objPPT.Visible = False ;Doesn't work... window still shows up
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $objPPT.Visible = ' & $objPPT.Visible & @CRLF & '>Error code: ' & @error & @CRLF &@extended) ;### Debug Console
$objPPT.Presentations.Open(@ScriptDir&"\test.potx") ; Works, PPT opens
$PPT=$objPPT.ActivePresentation.Slides(1)
$PPT.Shapes.AddTextBox(1,5,5,100,50) ; Works, creates the text box
MsgBox(0,"","did it work?")
$objPPT.SaveAs ("C:\Users\TEMP\Downloads\Output.ppt") ; doesn't work, doesn't save the file
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $objPPT.SaveAs = ' & $objPPT.SaveAs & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$objPPT.Quit ; works, closes powerpoint

this was the error outputs:

@@ Debug(8) : $objPPT.Visible = 0

>Error code: 0

0@@ Debug(14) : $objPPT.SaveAs =

>Error code: -2147352570

Edited by Jewtus
Posted

I'm sure you can't save the application object. You need to save the presentation.

Something like this (untested):

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

$objPPT.Visible = False ;Doesn't work... window still shows up
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $objPPT.Visible = ' & $objPPT.Visible & @CRLF & '>Error code: ' & @error & @CRLF &@extended) ;### Debug Console
$oPresentation = $objPPT.Presentations.Open(@ScriptDir&"\test.potx") ; Works, PPT opens
$PPT=$objPPT.ActivePresentation.Slides(1)
$PPT.Shapes.AddTextBox(1,5,5,100,50) ; Works, creates the text box
MsgBox(0,"","did it work?")
$oPresentation.SaveAs ("C:\Users\TEMP\Downloads\Output.ppt") ; doesn't work, doesn't save the file
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $objPPT.SaveAs = ' & $objPPT.SaveAs & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$objPPT.Quit ; works, closes powerpoint

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted (edited)

Ya I managed to figure out what was going on... it was my syntax. I was calling the wrong string but I was able to figure it out:

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc")

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

AddSlide(2,11,"Example Project")
Func AddSlide($slideNum,$format,$projectName)
    $PPT=$objPPT.Presentations.Open("C:\Users\TEMP\Desktop\test.potx")
    $objSlide1 = $PPT.Slides.Add($slideNum,$format)
    $objSlide1.Shapes.Item(1).TextFrame.TextRange.Text = $projectName
    $objSlide1.Shapes.AddTextBox(1,35,60,400,50)
    $objSlide1.Shapes.Item(2).TextFrame.TextRange.Text = "Overall Status"
    $objSlide1.Shapes.AddTextBox(1,300,60,400,50)
    $objSlide1.Shapes.Item(3).TextFrame.TextRange.Text = "Issues"
EndFunc
$objPPT.Quit ; works, closes powerpoint
Edited by Jewtus
Posted (edited)

I was wondering if anyone could let me know how to get around autoit trying to use this as a function call:

$objPPT = ObjCreate("PowerPoint.Application")
If @error Then
    MsgBox(0,"","No PowerPoint available")
    Exit
EndIf

AddSlide(2,11,"Example Project")
Func AddSlide($slideNum,$format,$projectName)
    $PPT=$objPPT.Presentations.Open("C:\Users\TEMP\Desktop\test.potx")
    $rows=10
    $cols=3
    $objSlide1 = $PPT.Slides.Add($slideNum,$format)
    With $objSlide1
        .Shapes.Item(1).TextFrame.TextRange.Text = $projectName
        .Shapes.AddTextBox(1,35,60,400,50) ;type,left,top,width,height
        .Shapes.Item(2).TextFrame.TextRange.Text = "Overall Status"
        .Shapes.AddTextBox(1,300,60,400,50)
        .Shapes.Item(3).TextFrame.TextRange.Text = "Issues"
        .Shapes.AddTextBox(1,500,60,400,50)
        .Shapes.Item(4).TextFrame.TextRange.Text = "Next Week"
        .Shapes.AddShape(151,30,100,200,200)
        .Shapes.Item(5).Fill.ForeColor.RGB= RGB(125,125,125)
        .Shapes.AddTable($rows,$cols,60,120,100,100)
    EndWith
EndFunc

This line:

.Shapes.Item(4).Fill.ForeColor.RGB= RGB(125,125,125)
Gives me an error: RGB(): Undefined function

I'm almost 100% sure the syntax is correct, but just in case, I was working off of this model:

http://msdn.microsoft.com/en-us/library/office/aa213151(v=office.11).aspx

Edited by Jewtus
Posted

Put quotes around it?

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Posted

The error message is correct:

RGB is neither a method of the PowerPoint object model nor a function of AutoIt. It is a VBA function.

So you have to write your own RGB method to mimic the VBA function.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

Put quotes around it?

 

I tried that and it didn't work... It gives a COM error (80020005) type mismatch

 

The error message is correct:

RGB is neither a method of the PowerPoint object model nor a function of AutoIt. It is a VBA function.

So you have to write your own RGB method to mimic the VBA function.

 

Not sure how I would actually do that...

Wouldn't  _WinAPI_RGB work?  I'm currently unable to test.  

 

Adam

I tried this and it doesn't give me any errors, however the shape that is created still has no fill, outline, or anything.

Posted

What is the value of @error after

.Shapes.Item(5).Fill.ForeColor.RGB = ...

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

 

What is the value of @error after

.Shapes.Item(5).Fill.ForeColor.RGB = ...

Not sure exactly what you mean... I need to put something after the RGB. So if I put "RGB(125,125,125)" I get an error 80020005. If I don't put anything after it, I get a syntax error. If I remove the = sign I get no errors but obviously, the color doesn't change

Posted

You said you tried the _WinAPI_RGB approach. What did you code?

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

Put some number, for example 0xff0000.

Tried it

.Shapes.Item(5).Fill.ForeColor.RGB="0xff0000" gives me a type mismatch error

.Shapes.Item(5).Fill.ForeColor.RGB=0xff0000 doesn't do anything

You said you tried the _WinAPI_RGB approach. What did you code?

I tried this:

.Shapes.Item(5).Fill.ForeColor.RGB=_WinAPI_RGB(125,125,125)

  • Solution
Posted (edited)

This script sets the background color of item 5 to a dark blue and writes @error = 0 to the SciTE console.

Tested with PP 2010.

$oPPT = ObjCreate("PowerPoint.Application")
If @error Then Exit MsgBox(0, "Error", "No PowerPoint available")
AddSlide(2, 11, "Example Project")
MsgBox(0, "Information", "Test ended.")
Func AddSlide($slideNum, $format, $projectName)
    $oPresentation = $oPPT.Presentations.Open(@ScriptDir & "\Test.potx")
    If @error Then Exit MsgBox(0, "Error", "Error opening potx")
    $rows = 10
    $cols = 3
    $oSlide1 = $oPresentation.Slides.Add($slideNum, $format)
    With $oSlide1
        .Shapes.Item(1).TextFrame.TextRange.Text = $projectName
        .Shapes.AddTextBox(1, 35, 60, 400, 50) ;type,left,top,width,height
        .Shapes.Item(2).TextFrame.TextRange.Text = "Overall Status"
        .Shapes.AddTextBox(1, 300, 60, 400, 50)
        .Shapes.Item(3).TextFrame.TextRange.Text = "Issues"
        .Shapes.AddTextBox(1, 500, 60, 400, 50)
        .Shapes.Item(4).TextFrame.TextRange.Text = "Next Week"
        .Shapes.AddShape(151, 30, 100, 200, 200)
        .Shapes.Item(6).Fill.ForeColor.RGB = 0xff0000 ; RGB(255, 0, 0)
        ConsoleWrite("@error = " & @error & @CRLF)
        .Shapes.AddTable($rows, $cols, 60, 120, 100, 100)
    EndWith
EndFunc   ;==>AddSlide
Edited by water

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Posted

.Shapes.Item(5).Fill.ForeColor.RGB = _WinAPI_RGB(255, 0, 0)

works fine here.

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download
Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki
PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki
Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki

Standard UDFs:
Excel - Example Scripts - Wiki
Word - Wiki

Tutorials:
ADO - Wiki
WebDriver - Wiki

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...