VBA for Powerpoint  
Author Message
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Hi,

I have been asked to modify a powerpoint presentation so that from a series of jpg files, one appears on the screen and then after a specific time period disappears and is replaced by another; this being a continuous loop on one slide only - like a photo tour. I have the following code, but need to get it up and running. Any suggestions:

Sub ImportABunch()

Dim strTemp As String
Dim strFileSpec As String
Dim oSld As Slide
Dim oPic As Shape

strFileSpec = C:\PFS Pictures\beach party *.PNG
'Ex. on a PC: C:\My Pictures\Flowers\*.PNG

strTemp = Dir(strFileSpec)

Do While strTemp <>
Set oSld = ActivePresentation.Slides.Add ppLayoutBlank
Set oPic = ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:=strFileSpec, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)

'Reset it to its real size
With oPic
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
End With

'Get the next file that meets the spec and go round again
strTemp = Dir
Loop

End Sub

It's giving me compile errors in the places in red. Any help would be greatly appreciated.

Cheers,

Michelle



Microsoft ISV Community Center Forums1  
 
 
spotty





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

This forum relates specifically to VB,Net code and not earlier version of VB, VBA, VB Script

But I'll provide some useful information on places that may help

If you want to actual write VB code within Powerpoint - powerpoint does have a version of VB although its not based upon .NET technology and is probably closer to a limited version of VB6. It is called VBA (visual basic for Applications) as you correctly have stated

So often the best place is to get specific information about using writing VBA code for powerpoint

Office Automation: office.developer.automation newsgroup

http://msdn.microsoft.com/newsgroups/default.aspx dg=microsoft.public.office.developer.automation&lang=en&cr=US

http://forums.microsoft.com/MSDN/ShowForum.aspx ForumID=74&SiteID=1

If you specifically wants to build a VB.NET based solution in (Outlook, Sharepoint, Infopath, Word, or Excel), then have a look in the Visual Studio Tools Office forums: http://forums.microsoft.com/MSDN/default.aspx forumgroupid=4&siteid=1

This relates specifically to the wrtiting applications for the Office products of which powerpoint is one.

I hope that provides a few places to check.

As a point on the line

Do While strTemp <>

The line is incomplete.

And you need to detail what the errors are saying. That way people will be able to help. Saying its giving me compile errors is not always the most precise description.



 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

This forum relates specifically to VB,Net code and not earlier version of VB, VBA, VB Script

Then why is the forum called "Visual Basic for Applications" There are plenty of other forums here that deal with the whole dot net universe.

To the original post:

this should work better:

Do While strTemp <> ""
Set oSld = ActivePresentation.Slides.Add (ppLayoutBlank)


- Jon
-------
Jon Peltier, Microsoft Excel MVP
Peltier Technical Services
Tutorials and Custom Solutions
http://PeltierTech.com/
_______




 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Thanks heaps for that John!

I've altered the code as below:

Sub ImportABunch()

Dim strTemp As String
Dim strFileSpec As String
Dim oSld As Slide
Dim oPic As Shape

strFileSpec = "C:\Documents and Settings\My Documents\My Pictures *.JPG"
'Ex. on a PC: C:\My Pictures\Flowers\*.PNG

strTemp = Dir(strFileSpec)

Do While strTemp <> ""
Set oSld = ActivePresentation.Slides.Add(ppLayoutBlank)
Set oPic = ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:=strFileSpec, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)

'Reset it to its real size
With oPic
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
End With

'Get the next file that meets the spec and go round again
strTemp = Dir
Loop

End Sub

However, its giving me a compile error that states "Argument not optional" when it encounters the bit in red. Also, do i need to reference this code to a particular option on my slide show, or will it create a picture frame and insert the picture as the given size and at the given position in the code.

Cheers,

Michelle


 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

The quickest way to get help in the VB Editor is using the Object Browser. If it's not visible, press the F2 key, or find it in the View menu. Find Slides in the left list, and click on Add in the right. In the bottom of the OB it says:

Function Add(Index As Long, Layout As PpSlideLayout) As Slide

So you're missing the slide index. Try this:

Set oSld = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count, ppLayoutBlank)

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Peltier Technical Services
Tutorials and Custom Solutions
http://PeltierTech.com/
_______



 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Private Sub Image1_Click()

Dim strTemp As String
Dim strFileSpec As String
Dim oSld As Slide
Dim oPic As Shape

strFileSpec = "C:\Documents and Settings\Michelle\My Documents\My Pictures *.JPG"

strTemp = Dir(strFileSpec)

Do While strTemp <> ""
Set oSld = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count, ppLayoutBlank)
Set oPic = ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:=strFileSpec, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)

'Reset it to its real size
With oPic
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
End With

'Get the next file that meets the spec and go round again
strTemp = Dir
Loop

End Sub

The code compiles, i've checked that there are definately pictures in JPG format in My Pictures and i've hooked the code up to a picture object, but when i run the slide show nothing happens

Thanx heaps for all your help! Much appreciated.

Cheers
Michelle


 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Two things.

1. After this line:

Do While strTemp <> ""

insert this:

Debug.Print strTemp

which will list all the files that were inserted by the procedure.

2. Is this the correct path

"C:\Documents and Settings\Michelle\My Documents\My Pictures *.JPG"

on my machine it would be

"C:\Documents and Settings\Michelle\My Documents\My Pictures\*.JPG"

I think you've left out the backslash.


- Jon
-------
Jon Peltier, Microsoft Excel MVP
Peltier Technical Services
Tutorials and Custom Solutions
http://PeltierTech.com/
_______



 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Okay,

I've made the corrections you recommended, and its giving me a runtime error - specified file not found. I've double checked the file path and its definately correct, but the pics in the folder open up as JPEG's. This still can't be the problem as I've converted one of the picture files in the folder to a GIF and altered the code accordingly. Nothing happens. I've also tried changing the code to find JPEG's. When i run it and click on the picture frame in my opening slide, nothing happens. Does VBA accept JPEG as a format

Cheers,
Michelle


 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

The way you set strFileSpec, the directory is

C:\Documents and Settings\Michelle\My Documents

and the file name is

My Pictures *.JPG

On my computer, there is a default path

C:\Documents and Settings\Jon\My Documents\My Pictures

which has some sample images in it which were installed with Windows. I still think this is part of your remaining difficulty.

Did you insert the Debug.Print line What file names appeared in the Immediate Window

It's not VBA accepting a JPG format anyway, it's PowerPoint accepting it, under orders of VBA.



 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Thanx for that. I'll have another look at it a bit later on. Gotta get this java varsity assignment out of the way first!

Cheers,
Michelle


 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Hi Jon,

I've had another look at it. Under "My Pictures" if have a several .jpg files, one of which is 1089.jpg. When i'm running the program it displays only 1089.jpg in the immediate window and then a runtime error that the specified file wasnt found

Cheers,

Michelle


 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Change this line

strFileSpec = "C:\Documents and Settings\Michelle\My Documents\My Pictures *.JPG"

to this

strFileSpec = "C:\Documents and Settings\Michelle\My Documents\My Pictures\*.JPG"

I have thought for a while that the missing backslash before *.JPG was part of the problem.

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Peltier Technical Services
Tutorials and Custom Solutions
http://PeltierTech.com/
_______




 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Private Sub Image1_Click()

Dim strTemp As String
Dim strFileSpec As String
Dim oSld As Slide
Dim oPic As Shape

strFileSpec = "C:\Documents and Settings\Michelle\My Documents\My Pictures\*.JPG"
'Ex. on a PC: C:\My Pictures\Flowers\*.PNG

strTemp = Dir(strFileSpec)

Do While strTemp <> ""
Debug.Print strTemp
Set oSld = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count, ppLayoutBlank)
Set oPic = ActiveWindow.Selection.SlideRange.Shapes.AddPicture(FileName:=strFileSpec, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)

'Reset it to its real size
With oPic
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
End With

'Get the next file that meets the spec and go round again
strTemp = Dir
Loop

End Sub


Hi Jon,

Tried the code with the backslash and am still getting a runtime error.

Any further suggestions

Cheers,
Michelle


 
 
Jon Peltier





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Oh, Duh! Of course it can't find a file named *.JPG!

Do it as follows to make it easier to hijack for other projects in the future.

Private Sub Image1_Click()

Dim strTemp As String
Dim strPath As String
Dim strExt as String

Dim strFileSpec As String
Dim oSld As Slide
Dim oPic As Shape

strPath = "C:\Documents and Settings\Michelle\My Documents\My Pictures"
strExt = ".JPG"

strFileSpec = strPath & "\*" & strExt
'Ex. on a PC: C:\My Pictures\Flowers\*.PNG

strTemp = Dir(strFileSpec)

Do While strTemp <> ""
Debug.Print strTemp
Set oSld = ActivePresentation.Slides.Add(ActivePresentation.Slides.Count, ppLayoutBlank)
Set oPic = ActiveWindow.Selection.SlideRange.Shapes.AddPicture( _
FileName:=strPath & "\" & strTemp, _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)

'Reset it to its real size
With oPic
.ScaleHeight 1, msoTrue
.ScaleWidth 1, msoTrue
End With

'Get the next file that meets the spec and go round again
strTemp = Dir
Loop

End Sub



 
 
MeMe_89765





PostPosted: Visual Basic for Applications (VBA), VBA for Powerpoint Top

Thanks for that. No run time errors occurring. Now just have to hook the code up. Will let you know how it goes.

Cheers,

Michelle