kann nicht alle shapes entfernen?!, schleife zu kurz?

02/04/2009 - 13:59 von jaquesthereal | Report spam
hallo liebe gemeinde
ich hab da mal ne frage zu einem powerpoint script
die grunddaten hab ich von hier:
http://www.vb-fun.de/cgi-bin/forumarchiv.pl?archiv69&ID=1&action=zeigeseite&nummer•265#Atext

allerdings angepasst + fehler drin :D

also ich erstelle einer powerpoint pràsi mit vielen folien
auf jeder folie möchte ich kàstchen darstellen für die anzahl der
folien + ein anders farbiges kàstchen für den aktuellen verlauf
innerhalb der pràsi
das funkioniert auch, allerdings beim mehrmaligen ausführen der sub
werden nicht immer alle kàstchen entfernt, was dazu führt das ich auf
einigen folien sehr viele kàstchen darstelle, zwar alle übereinander
sodass es nicht so schlimm ist, aber das macht die pràsi auf meinem
rechner elendig langsam
und ich will es einfach nicht :D, vonwegen sauber programmieren und so

dazu hab ich auch diverse lösungsansàtze versucht um meine kàstchen zu
entfernen, allerdings funktioniert das nicht und genau das ist meine
frage, wo ist der fehler?!

ich habe mal die gesamte sub gepostet, darf gerne verwendet werden
wenn mir der fehler erklàrt wird :D
danke schön
gruss jochen

ps ich hab auch mal den support für das bild drin gelassen! ;)

Sub CountPlaceCounter()
Dim i As Long
Dim objPres As Presentation
Dim Count As Long
Dim nSlide As Long
Dim nSlidePicture As Long
Dim objShape As Shape

Dim oSlide As Slide
Dim oPicture As Shape
Dim sImagePath As String

' Initialize the counter.
Count = 0

Set objPres = ActivePresentation
If objPres.Slides.Count > 0 Then
Count = objPres.Slides.Count

'hier versuche ich die shapes zu entfernen!
' mit diverersen ideen, die hab ich extra drin gelassen, es hat
nàmlich keine funktionert :(
' verusch einfach zu zàhlen, Do While, While, ... einfach ratlos :)
For nSlide = 1 To Count
i = 1
' Do While InStr(1, objPres.Slides(nSlide).Shapes
(i).Name, "seitenanzeiger") > 0
If objPres.Slides(nSlide).Shapes.Count > i And InStr(1,
objPres.Slides(nSlide).Shapes(i).Name, "seitenanzeiger") > 0 Then
Do While InStr(1, objPres.Slides(nSlide).Shapes
(i).Name, "seitenanzeiger") > 0
Debug.Print nSlide & ": " & objPres.Slides(nSlide).Shapes(i).Name
objPres.Slides(nSlide).Shapes(i).Delete
i = i + 1
Loop
End If
' For i = 1 To objPres.Slides(nSlide).Shapes.Count
' Set objShape = objPres.Slides(nSlide).Shapes(i)
'Debug.Print nSlide & ": " & objShape.Name
' If InStr(1, objShape.Name, "seitenanzeiger") > 0 Then
' objShape.Delete
' End If
' Next i


For Each objShape In objPres.Slides(nSlide).Shapes
'Debug.Print nSlide & ": " & objShape.Name
If InStr(1, objShape.Name, "seitenanzeiger") > 0 Then
objShape.Delete
End If
Next
Next nSlide


For nSlide = 1 To Count
Set oSlide = ActiveWindow.Presentation.Slides(nSlide)
For nSlidePicture = 1 To Count
If nSlidePicture = nSlide Then
sImagePath = "c:\blau.png"
Set oPicture = oSlide.Shapes.AddShape
(msoShapeRectangle, 50 + nSlidePicture * 19, 400, 10, 10)
' Set oPicture = oSlide.Shapes.AddPicture
(sImagePath, _
msoFalse, msoTrue, 1, 2, 3, 4)
oPicture.Fill.ForeColor.RGB = RGB(0, 0, 200) 'blau
Else
sImagePath = "c:ot.png"
Set oPicture = oSlide.Shapes.AddShape
(msoShapeRectangle, 50 + nSlidePicture * 19, 400, 10, 10)
' Set oPicture = oSlide.Shapes.AddPicture
(sImagePath, _
msoFalse, msoTrue, 1, 2, 3, 4)
oPicture.Fill.ForeColor.RGB = RGB(200, 0, 0) 'rot
End If
oPicture.Name = "seitenanzeiger"

' oPicture.ScaleHeight 1, msoTrue
' oPicture.ScaleWidth 1, msoTrue
With ActivePresentation.PageSetup
' oPicture.Left = 50 + nSlidePicture * 17
' oPicture.Top = 400
End With
Next nSlidePicture
Next nSlide
End If
End Sub
 

Lesen sie die antworten

#1 Hans W. Hofmann
09/04/2009 - 22:33 | Warnen spam
schrieb:
8<--

ich habe mal die gesamte sub gepostet, darf gerne verwendet werden
wenn mir der fehler erklàrt wird :D



Zu gütig, aber ich mache meine Fehler lieber selber ;-)...


ps ich hab auch mal den support für das bild drin gelassen! ;)



Ohne das Gesamtkunstwerk bis ins letzte Detail studiert zu haben glaube
ich zu wissen, dass Deine Schleifenkonstruktionen fehlerhaft sind.
Wenn DU Mitglieder einer Auflistung löschen willst, dann musst du von
Count unterzàhlen und nicht von 1 nach Count. Die Begründung spar ich
mir mal, weil Du könntest vielleicht selber draufkommen mit etwas
nachdenken...
i ~ 1.2.3..Count
^
i=3 delete next i

Gruß HW

Ähnliche fragen