2016-03-31 24 views
0

Ich erstelle ein Makro in PowerPoint VBA, um ein Bild von der aktuellen Folie zu exportieren. Das Exportbild ist das erste Bild mit einer Breite von mehr als 250 Einheiten. Das Bild wird als Shape gespeichert, also mache ich eine For Each ... Next Schleife, um es zu tun. Der Code funktioniert gut.Wie wird die Exportbildgröße in PowerPoint mithilfe von VBA angepasst?

Function FindAndSavePicture() As String 
' 
' Find the target picture at the active windows 
' 
' 
    Dim myTempPath As String 
    myTempPath = "C:\Users\" & Environ$("USERNAME") _ 
      & "\AppData\Local\Microsoft\Windows\pic_VBA.jpg" 

    With ActiveWindow.Selection.SlideRange 
     For Each s In .Shapes 
      Debug.Print s.Name 
      If s.Type = msoPicture And s.Width > 250 Then 

       ' Show scale 
       Debug.Print "s.Width=" & s.Width ' s.Width=323,3931 
       Debug.Print "s.Height=" & s.Height ' s.Height=405 

       ' Save pic in file system 
       s.Export myTempPath, ppShapeFormatJPG 

       ' assign the return value for this function 
       FindAndSavePicture = myTempPath 
       Exit For 

      End If 
     Next 
    End With 
End Function 

Problem

Das pic_VBA.jpg exportierte Bild ist viel kleiner, als es in der Powerpoint angezeigt wird. Ich möchte die Originalgröße des Bildes. Dieses exportierte Bild von VBA pic_VBA.jpg hat 331 x 413 in Abmessungen. Und wenn ich das Bild manuell mit als Bild speichern ... exportieren, hat das exportierte Bild pic_SaveAs.jpg 692 x 862 in Abmessungen, die die Originalgröße ist.

  • pic_VBA.jpg Abmessungen: 331 x 413
  • pic_SaveAs.jpg Abmessungen: 692 x 862 (Originalgröße)

Was ich

s.Export myTempPath, ppShapeFormatJPG, s.Width, s.Height, ppScaleXY 

Es getestet habe funktioniert nicht . Die Abmessungen des Export Bild sind 150 x 413

Frage

So, wie Export Bildgröße in Powerpoint mit VBA anpassen?


Verwandte infomations

Antwort

1

Ist das Bild in Powerpoint skaliert? Wenn es alles andere als 100% ist, müssen Sie den Maßstab% in X/Y-Dimensionen berechnen, auf 100% setzen, exportieren und dann auf die gespeicherten Einstellungen zurück skalieren. Diese Funktion wird mit dem assistieren:

' Function to return the scale percentages of a given picture shape 
' Written by: Jamie Garroch of YOUpresent.co.uk 

Public Type ypPictureScale 
    ypScaleH As Single 
    ypScaleW As Single 
End Type 

' Calculate the scale of a picture by resetting it to 100%, 
' comparing with it's former size and then rescaling back to it's original size 
Public Function PictureScale(oShp As Shape) As ypPictureScale 
    Dim ShpW As Single, ShpH As Single 
    Dim LAR As Boolean 

    ' Save the shape dimensions 
    ShpH = oShp.height 
    ShpW = oShp.width 

    ' Unlock the aspect ratio if locked 
    If oShp.LockAspectRatio Then LAR = True: oShp.LockAspectRatio = msoFalse 

    ' Rescale the image to 100% 
    oShp.ScaleHeight 1, msoTrue 
    oShp.ScaleWidth 1, msoTrue 

    ' Calculate the scale 
    PictureScale.ypScaleH = ShpH/oShp.height 
    PictureScale.ypScaleW = ShpW/oShp.width 

    ' Rescale the image to it's former size 
    oShp.ScaleHeight PictureScale.ScaleH, msoTrue 
    oShp.ScaleWidth PictureScale.ScaleW, msoTrue 

    ' Relock the aspect ratio if originally locked 
    If LAR Then oShp.LockAspectRatio = msoFalse 
End Function 
+0

Können Sie mir bitte sagen, wo Sie Ihre Funktion in meinem Code verwenden? Ich benutze niemals 'Type' vorher. Soll ich etw als 'Dim myType als ypPictureScale' bezeichnen? –

+0

Typdeklarationen müssen in den Deklarationsabschnitt Ihres Codemoduls (vor allem Sub- und Funktionsprozeduren) gehen. –

+0

Hallo @JamieG, ich habe es versucht. Vielleicht vergessen Sie, Präfix "yp" in Zeile 27 und Zeile 28 hinzuzufügen? In Zeile 27 sollte es "PictureScale" sein.ypScaleH' stattdessen. Abgesehen von diesem Problem funktioniert Ihr Code perfekt. Allerdings hat es meine Frage nicht gelöst, da es das Bild mit der gleichen Größe wie das, was ich gemacht habe, mit der Standardeinstellung 's.Export myTempPath, ppShapeFormatJPG' exportiert. Ich konnte es nicht akzeptieren, aber ich habe deine Antwort erneuert. Ich werde jetzt aufhören, an dieser Frage zu arbeiten (mein Kollege brauche es nicht mehr), aber danke für deine Hilfe! –

0

Aus Ihren Kommentaren nicht klar ist, aber man kann die Tatsache nicht fehlen, dass Powerpoint verwendet Punkte (72 Punkte pro Zoll) als Dimensionen, nicht Zoll oder Pixel.

Die Größe der Form von Punkten in Zoll umrechnen und dann mit 150 multiplizieren, um die Größe zu erhalten, in die PPT exportiert wird.

Das 150 kann von einem System zum anderen variieren, aber ich glaube nicht, dass es tut.

+0

Danke für deine Antwort, Steve. Ja, ich habe die Einheitenumrechnung nicht erwähnt. Aber ich fürchte, das Problem war nicht hier. Wenn "Breite" und "Höhe" eingegeben werden, hat der Exportmodus die Größenverhältnisse nicht berücksichtigt. '331: 413' =' 692: 862' = 0.80, aber '150: 413' = 0.36 –

+0

Ich denke, es könnte nicht eine einfache Multiplikation (z. B. 150) für den' Export' Sub sein. Es benötigt eine Skalenhöhe und eine Skalenbreite wie @JamieG vorgeschlagen. Leider weiß ich nicht, wie man seinen Code anwendet ... –

+0

Das hängt davon ab, ob es Ihnen wichtig ist, das Bild vor dem Exportieren in Originalgröße (wie von PPT konzipiert) wiederherzustellen. –

Verwandte Themen