Opgelost Positioneer plaatje in PPT

  • Onderwerp starter Onderwerp starter SA3
  • Startdatum Startdatum
Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

SA3

Gebruiker
Lid geworden
3 jan 2016
Berichten
130
Ik heb een aantal PPT's. Iedere dia in zo'n PPT bevat een plaatje in PNG. Deze plaatjes zijn van gelijke grootte.
Deze plaatjes moeten echter worden verschoven naar een vaste positie binnen iedere dia.
Deze actie moet worden uitgevoerd op 10-tallen PPT-bestanden.
Wie helpt?
 
Daar zou ik dan een macrootje voor schrijven. Als je een voorbeeldje post, dan kan ik er wel even naar kijken morgen. Met dus op één dia de plek waar je de afbeelding wilt hebben :).
 
Hieronder 2 PPT-dia's. De dia's bevatten beide dezelfde PNG. Echter Dia1 is de huidige en deze heb ik handmatig gewijzigd naar de gewenste Dia2. Iedere PPT bevat meerde dia's gelijk aan die van Dia1. Dus is het nodig ze per dia binnen de PPT te vergroten en te verplaatsen naar een vaste locatie op de dia.

Ik zoek een VBA-procedure die in 1 handeling al deze PPT's aanpast.
 

Bijlagen

  • Dia1.JPG
    Dia1.JPG
    66,4 KB · Weergaven: 7
  • Dia2.JPG
    Dia2.JPG
    96,7 KB · Weergaven: 7
Dat is niet wat ik bedoel; een presentatie met dia's is een stuk nuttiger. Zeker voor een PowerPoint vraag :).
 
Ik wil 2 PPT-bestanden toevoegen maar dat is niet toegestaan. Hoe wel?
 
Zal er vandaag naar kijken!
 
Ter aanvulling zie bijlage. Deze macro doet wat ik bedoel. Deze werkt echter alleen binnen een PPT.
Ik wil deze macro in één handeling uitvoeren op een map met 10-tallen PPT's.
 

Bijlagen

Ik begrijp dat je de afbeeldingen over de volledige breedte wilt hebben en . Zo te zien (stukken van) liedjes op vier balken. Is het de bedoeling dat de presentaties in één map staan, eventueel met sub mappen? Want je kunt het proces niet zomaar automatiseren als je lukraak naar mappen moet zoeken.
 
Kan je voor de maten binnen de dia de maten uit de XXL-macro overnemen.
Alle presentaties staan in één map.
 
Dan is het niet zo moeilijk :).

Code:
Sub XXL()
Dim ppt As Object
Dim pres As PowerPoint.Presentation
Dim sld As PowerPoint.Slide
Dim ppE As PowerPoint.Effect
Dim shp As PowerPoint.Shape
Dim arr() As Variant, vrtItem As Variant
Dim dlg As FileDialog
Dim pad As String, tmp As String, i As Integer


    Set dlg = Application.FileDialog(msoFileDialogFolderPicker)
    With dlg
        .AllowMultiSelect = False
        If .Show = True Then pad = .SelectedItems(1)
    End With
   
    tmp = Dir(pad & "\*.ppt", vbNormal)
    Do While Not tmp = ""
        ReDim Preserve arr(i)
        arr(i) = pad & "\" & tmp
        i = i + 1
        tmp = Dir
    Loop
   
    Set ppt = New PowerPoint.Application
    For i = LBound(arr) To UBound(arr)
        Set pres = ppt.Presentations.Open(arr(i), msoFalse)
        For Each sld In pres.Slides.Range
            For Each shp In sld.Shapes
                With shp
                    If (.Type = msoPicture) Or (.Type = msoAutoShape And Not .HasTextFrame) Then
                        .LockAspectRatio = msoTrue
                        .Top = 50
                        .Width = 710
                        .Left = 5
                        .Fill.Solid
                        .Fill.Visible = msoFalse
                   End If
                End With
            Next
        Next
        pres.Saved = msoTrue
        pres.Close
    Next i


End Sub
 
Het werkt niet. Blijft hangen op For Each sld In pres.Slides.Range. Als ik deze vervang door For Each sld In ActivePresentation.Slides.Range loopt ie wel verder. Dan wordt de IF-loop wel doorlopen maar de shape wordt niet bewerkt. Tot slot gaat het fout op pres.Close
Doe ik iets fout?
 
Geen idee, ik heb 'm getest en hij doet het bij mij prima. Opent hij de presentatie wel op het scherm? Ik heb 'm overigens vanuit Word gestart, met de PowerPoint bibliotheek geladen. Wellicht is dat het probleem?
 
En net de complete code zo in PP365 geplakt in een module, en gedraaid, en ook daar werkt hij zonder verdere aanpassingen.
 
Als ik de macro met F5 run gaat ie keurig naar de map waarin de PPT staat. Hierna zie ik niets meer.
Als ik met F8 er doorheen stap wordt keurig de loop voor de shape variabelen doorlopen. Hierna zie ik niets meer.
Waar wordt de output heen geschreven?
 
Met de bestanden gebeurt verder niets; ze worden opgeslagen in dezelfde map onder dezelfde naam. Heb je ze al geopend om ze te controleren? (lijkt mij de eerste stap ;))
 
Zoals gezegd, als ik met F8 door de macro stap zie ik dat de shapes worden gewijzigd maar niet gesaved (in dezelfde map)?!
 
Dit werkt bij mij, windows11en, office2007nl

Code:
Option Explicit

Public Sub PositionImages()

    Dim lngPresentations As Long
    Dim strPresentationPath As String
    Dim objShape As Object
    Dim objSlide As Object

    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
        For lngPresentations = 1 To .SelectedItems.Count
            strPresentationPath = .SelectedItems(lngPresentations)
            With CreateObject("PowerPoint.Application")
                .Presentations.Open strPresentationPath
                With .ActivePresentation
                    For Each objSlide In .Slides
                        For Each objShape In objSlide.Shapes
                            With objShape
                                If .Type = msoPicture Then
                                    .LockAspectRatio = msoTrue
                                    .Left = 0
                                    .Top = 2.1 / 25.4 * 72 * 10
                                    .Width = 25.4 / 25.4 * 72 * 10
                                End If
                            End With
                        Next
                    Next
                    .Save
                    .Close
                End With
            End With
        Next
    End With

    MsgBox "Images positioned in all presentations."

End Sub
 
Laatst bewerkt:
Dank. Werkt! De maten voor de afmetingen begrijp ik niet. Ik heb Top, Width en Left gewijzigd in resp. 50, 680 en 20. Maar dat is natuurlijk naar behoefte te wijzigen.
 
.Top = 2.1 / 25.4 * 72 * 10
2.1cm / 25.4cm/inch * 72punten/inch * 10factor
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan