Managing a PPT project judiciously

H

Hari Prasadh

Hi,

Not related to PPT (its about how to MANAGE huge PPT projects) as such but
didnt know where else to post.

I have to automate a huge series of PPT reports like X number of Class 1
kind of reports having lets say Y slides and then Z number of Class 2 kind
of reports having lets say W slides each and Class 3, Class 4 and so on and
on.

The numbers X, Y, Z, W and so on and on are quite considerable.

a. Within a particular class like lets say Class1 the structure (layout and
kind/type of objects) of slides (INTRA class comparison - Slide 1 of PPT1 =
Slide1 of PPT2 , Slide2 of PPT1 = Slide2 of PPT2 and so on) would be 85-90%
SAME.
b. Some of the reports within Class 1 might have some EXTRA slides in the
middle of the presentation. Like if there are 100 slides in PPT1 there might
be 110 in PPT2 so Slide1 to Slide 73 of PPT1 would be equal in layout to
Slide 1 to slide 73 of PPT2, but Slide 74 is an extra slide in PPT2. So,
Slide 74 in PPT1 would be equal to Slide 75 of PPT2 and the pattern would
continue with intermittent addition of slides in either of PPT1 or PPT2.
c. Having said that within a particular PPT, Slide1 layout/objects is not
equal to Slide2 layout/objects and so on.
d All the data resides in Excel (TONS of Excel files I believe) and it
would have to be pasted in PPT in OLE -- editable -- form (as a Excel
sheet/Chart/MS Applet Graph).

There will be a series of different macro calls with changes in parameter
(Considering the quantum of project, parameter passing itself is one big
headache and a good candidate for effective PM aka Parameter Management).

I have pondered a little on how I will be executing it. One stuff I thought
of is that since I would be running macros on different computers and
different computers will have different Paths for storing Input Excel data
so I needed to give user (user is myself - would be running the macros
parallely in many computers) the ability to change path (Hard-coded paths
wont work). Also, standard input boxes for changing paths wont work because
considering the number of objects in which data is to be populated user cant
keep on writing/specifying paths during macro execution. So, I split up
path names in to one Soft-path and second Hard-path and stored both of them
in an excel sheet.

Soft-path is something like - C:\Documents and Settings\Hari\Project Name\ -
This part of the path is same for all objects in all slides within all CLASS
of reports.

Hard-path for a specific object's data folder - Class1\MRAUTE1\2005\ -- The
Hard path will change depending on the object, class and year. (I have give
unique names to each object and created separate folders for them like
MRAUTE1 above.)

So, if we move to a different computer then I would have to change only the
soft-path (a single cell in a global excel file has to be changed and it
will adjust paths for all objects). Again when we move to a different
computer I would paste my data in such a way that it matches the folder
structure as specified in the hard path of my excel file.

New computer:-
Soft-path:- C:\Documents and Settings\Incognito\Project Name\
Hard-Path: - Class1\MRAUTE1\2005\


My boss suggested that for better project mgmt it would be helpful if I
create different folders for different slides within each class of report.
So, the present hard-path could be changed to Class1\Slide1\MRAUTE1\2005\
for an object named MRAUTE1 within Slide1 of Class1 report and again for
object named YUERTW1 in Slide2 of Class1 it would be like
Class1\Slide2\YUERTW1\2005\ and so on and on.

Initially I thought that it would be a great idea as it would have been
broken in to manageable chunks. But.... in light of point b) above it causes
some NEW problems. As mentioned slide1 to slide 73 are equal within a
particular class of reports, but slide 74 might be different in some PPT's
within that Class and same for future slides.

So, when am passing parameters I would get in to deep problems. Say I
instruct my macro -- Go and fetch data for object named as "PRAEED42" in
slide 74 for PPT1 in Class1 from the Hard-path--
Class1\Slide74\PRAEED42\2005\. But slide 74 for PPT2 in Class1 there might
be no object named "PRAEED42". On the other hand it is in slide 75 of PPT2
we find an object named PRAEED42" (slide 75 of PPT2 is equivalent to slide
74 of PPT1).

In all if I make different folders for different slides Project mgmt might
seem to be better but parameter management would become EVEN more tedious.
Any thoughts?

Would be grateful if I could get some guidelines/ideas on how to MANAGE
(strategic/tactical) things specifically in PPT automation.

Thanks a lot,
Hari
India
 
B

Brian Reilly, MS MVP

Hari,
I've done a number of large projects like this and can suggest two
approaches. The second one is still in development but the first one
has worked flawlessly for me for literally millions of pages in PPT.

First, folder structure is critical as you point out. I typicallly has
a toplevel folder that I will for sake of discussion call Application.
Then I will have various other folders to store stuff and keep it
neat, e.g. application\data and application\FinishedPresentations and
maybe even application\artwork. As long as I create this same
structure on every machine and I do that just simply by copying the
application folder and all subfolders to each machine, then I just use
activeworkbook.path to get the path to the top folder (or
activepresentation.path if in PPT). Then if I want to get a data file
it is just activeworkbook.path & "\" & variablefilename to get to the
correct file.

The above raises the important question of where are you going to do
most of the work? In Excel or in PPT? I know the result is a PPT
presentation but it might be easier to use the structure of Excel to
make your life easier and run the application from there. I usually
do.

Now managing all these different presentations is simply a collation
task that can be made easy by maintaining lists in Excel. The list
would start in Row1 Column1 and have the Title of the Project
(presentation/topic/whatever)e.g. Class1. Then the rows below it would
have a list of each individual page in the order you want to collate
them in the presentation. After you do a Find in Row 1 matching the
Project you chose from a listbox or combobox you can just use that
reference and use the offset method to get the variable name to deal
with that page (.offset(i,0).value) in a For i = 1 to the row that
contains the last value in that presentation found by
MsgBox Range("A65256").End(xlUp).Row to get the number of entries in
that column.

I typically use the sheet name for the page name and usually have a
sheet level range name that is the same name on each sheet, e.g.
rngXLtoPPT

If you structure it like this you could end up with two short routines
and just loop forever. One routine to copy the rngXLtoPPT and one
routine to paste and position the object (for that matter you could
combine these although I usually don't since I like to copy and paste
routines that work from one project to the next with little or no
modification.

Another useful technique if you are replacing updated data in an
existing presentation (rather than creating new) is to use either
shape names or shape tags to identify objects. then you can just
iterate through the shapes on a page to see if they have the correct
name or tag and delete it. Then paste the new data and name it or tag
it so you can find it and delete it the next time.

Let me know if you want to continue this discussion. It is quite
appropriate to do here in the PPT newsgroup.

Warmest regards,

Brian Reilly, PowerPoint MVP
 
S

Steve Rindsberg

So, when am passing parameters I would get in to deep problems. Say I
instruct my macro -- Go and fetch data for object named as "PRAEED42" in
slide 74 for PPT1 in Class1 from the Hard-path--
Class1\Slide74\PRAEED42\2005\. But slide 74 for PPT2 in Class1 there might
be no object named "PRAEED42". On the other hand it is in slide 75 of PPT2
we find an object named PRAEED42" (slide 75 of PPT2 is equivalent to slide
74 of PPT1).

I can't say that I understood all of that but let's start here.

Slides as well as Shapes can have names.

If you name each slide e.g. "MySlide74" then its ordinal position within the
presentation doesn't matter.

ActivePresentation.Slides("MySlide74") will give you a reference to the correct
slide if it exists.
 
H

Hari Prasadh

Hi Brian,

Thanks for highly thoughtful inputs. Very much appreciated.
Then if I want to get a data file it is just activeworkbook.path & "\" &
variablefilename to get to the correct file.
This is something which I havent done. Main reason might be am not very
comfortable with the activeworkbook.path. May be I fear that the if the
relative position of active workbook with respect to other folders is
changed (due to some reason) then it might trouble me. Would definitely try
to overcome the same.
The above raises the important question of where are you going to do
most of the work? In Excel or in PPT?

Yes, I m going to use excel macros to transfer data to PPT (many courtesies
to Jon P and the unsung heroe/ines of Excel and PPT NG's) and position it. I
would use PPT macros only for very small proportion.
Then I will have various other folders to store stuff and keep it neat,
e.g. application\data and application\FinishedPresentations and
I have started working on folders but definitely should do a little better
work on the same. Have given only cursory thoughts to the same.
Now managing all these different presentations is simply a collation task
that can be made easy by maintaining lists in Excel.

If you structure it like this you could end up with two short routines
and just loop forever. One routine to copy the rngXLtoPPT and one

I have started with an Excel list in somewhat similar lines. But certainly
the way you put this list in to use is much too productive (!!) or rather
sophisticated for me. I am maintain this list (type of each object, Slide
number, unique object name (thnx to Shyam P), coordinates of PPT location
where object will go, Comments for myself and my colleagues who will be
providing input data etc.).

But, as of now I have used this list only to get clarity on the enormity (!)
of the task and MOST importantly to Communicate with people who provide me
with data without me verbally telling them as to what kind of data is needed
to be put in which folder. (I term it as Virtual communication). I would use
some of the list data but never thought (or rather could muster courage)
that 2 routines would be enough. Probably thats why I was cribbing about
parameter passing in my original post.
Another useful technique if you are replacing updated data in an existing
presentation (rather than creating new) is to use either shape names or
shape tags to identify objects. then you can just

I had quite engaging sessions on object names from some of the veterans of
this group. Thats why I did include the object name as part of my excel
list. But I think my way of just using that object name to get a handle on
that object name within PPT slide is naive at best. As you guessed in many
case I would be updating data and certainly makes sense to iterate through
all shapes and delete unwanted ones. Your idea of shape tags is certainly
new to me. How different is it from object names. What additional
functionality does it offer. (I did see a sub in your site some time back
named iterate_through_all_shapes but failed to appreciate it).
Let me know if you want to continue this discussion. It is quite
appropriate to do here in the PPT newsgroup.
Any words of wisdom is always game to me.

Thanks a ton for the time you devoted.

Regards,
Hari
India
 
H

Hari Prasadh

Hi Steve,

Thought that it is ONLY Excel which offers one to change sheet names (and
color them in 2002 and above).

How do we name a individual PPT slide. Can we do it only thru Editor or can
it be done manually as well.

If we create a copy of slide what happens to the new name of the slide.

I wanted to find out a little more about this and with trepidation typed
this out

Sub nameofslide()

MsgBox ActivePresentation.slides(1).Name

End Sub

Ordinal number of my activeslide was 19 and in the msgbox I got Slide60. Is
that probably a PPT default name (am sure person who created the template
might not have known about naming slides). Also my usage of Slides(1) is
probably wrong. In excel when we use sheets(1) it means the left most sheet.
In PPT what does this 1 mean.

Wrote some more incorrect syntaxes with this but would publish the same
after I get some more information.

Thanks a lot,
Hari
India
 
S

Steve Rindsberg

How do we name a individual PPT slide. Can we do it only thru Editor or can
it be done manually as well.

Via VBA ... there's no user interface for this.
If we create a copy of slide what happens to the new name of the slide.

In PPT2003 at least, PowerPoint gives the copy the next name it'd ordinarily
assign in sequence.

That is:

You have one slide, PPT names it Slide1
You add another, it becomes Slide2
You rename it to "Call me Hari"
You add another slide, it becomes Slide3
and so on.
Sub nameofslide()

MsgBox ActivePresentation.slides(1).Name

End Sub

Ordinal number of my activeslide was 19 and in the msgbox I got Slide60. Is
that probably a PPT default name (am sure person who created the template
might not have known about naming slides).

Correct. PPT assigns names to newly created slides.
Also my usage of Slides(1) is
probably wrong. In excel when we use sheets(1) it means the left most sheet.
In PPT what does this 1 mean.

In this case, it's the SlideIndex - the ordinal number of the slide in the
presentation. For all intents and purposes, the first slide.

So to change the name:

ActivePresentation.Slides(1).Name = "Call me Hari"

Now no matter where the slide is in the presentation (ie, say somebody moves it
to the end and it's no longer .Slides(1) ...

With ActivePresentation.Slides("Call me Hari")
' do whatever ...
End With
 
H

Hari

Hi Steve,

Thnx for the tutorial on slide names (Would check out the same in
2000/02 as well and report back in case of problems). That will help me
to a great extent in organizing my stuff.

Any more ideas would also be highly welcome.

Regards,
Hari
India
 
B

Brian Reilly, MS MVP

Hari,
Shape names and Shape tags have a lot of similarities in concept (easy
way to identify specific objects) but they are very different also in
many ways.

A shape can only have one name. But if you copy a named shape and
paste it to the same slide you end up, incorrectly, with two shapes
with the same name. A bug that can have a nasty bite depending on what
you are doing.

A shape can have many many many tags, so you can store lots of
information on a shape in tags. E.g. Each tag has two values
Application.ActivePresentation.Slides(1).Shapes(2).Tags.Add_
"TAGname", "TAGvalue"
So you could store the worksheet name and a named range in one tag,
the Height in another, the top in another, the left in another and the
width in yet another.

So if you iterate through all shapes looking for tags that have a name
of "Worksheet" you can check the sheet name and find the named range
to copy and know the positions to place it. Very little code there
since it's using variables in a loop.

Quite handy and quite efficient.

Brian Reilly, PowerPoint MVP
 
H

Hari Prasadh

Hi Brian,

This is highly cool stuff.

Have taken a printout of your post and would try to digest (not the paper !)
and would get back if I need any more assistance.

In ur first post you mentioned a second approach in development. Was
wondering about the same.

Thanks a lot,
Hari
India
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top