2016-03-31 133 views
0

我在PowerPoint VBA中創建一個宏以從當前幻燈片導出圖像。導出圖像將是寬度超過250個單位的第一個圖像。圖像存儲爲Shape,所以我做了一個For Each ... Next循環來做到這一點。代碼工作正常。如何使用vba在PowerPoint中調整導出圖像大小?

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 

問題

導出的圖像pic_VBA.jpg遠小於它在PowerPoint中所示。 我想要圖片的原始尺寸。由VBA pic_VBA.jpg導出的圖像尺寸爲331 x 413。如果我使用另存爲圖片...手動導出圖像,導出圖像pic_SaveAs.jpg的尺寸爲692 x 862,這是原始尺寸。

  • pic_VBA.jpg尺寸:331 X 413
  • pic_SaveAs.jpg尺寸:692 X 862(原始大小)

我測試

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

它不工作。出口圖像的尺寸爲150×413

問題

那麼,如何在PowerPoint中使用VBA調整出口圖像大小?


相關infomations

回答

1

在圖像中的PowerPoint縮放?如果它不是100%,則需要計算X/Y尺寸的比例%,將其設置爲100%,將其導出並將其縮放回存儲的設置。該功能將幫助是:

' 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

請問我可以在我的代碼中使用你的函數嗎?我以前從不使用'Type'。我應該像'Dim myType As ypPictureScale'一樣聲明使用某種東西嗎? –

+0

類型聲明必須放入代碼模塊的聲明部分(首先是Sub和Function過程)。 –

+0

嗨@JamieG,我試過了。你可能忘記在第27行和第28行添加前綴「yp」?在第27行中,它應該是'PictureScale。代替ypScaleH'。除了這個問題,你的代碼完美地工作。然而,它並沒有解決我的問題,因爲它導出的圖像大小與我使用默認設置's.Export myTempPath,ppShapeFormatJPG'時的大小相同。我無法接受它,但我贊成你的答案。我現在不再處理這個問題(我的同事不再需要它了),但感謝您的幫助! –

0

這不是從你的意見明確,但你可能會缺少PowerPoint使用點的事實(72點到英寸)的尺寸,而不是英寸或像素。

將形狀的大小從點轉換爲英寸然後乘以150以獲得PPT將導出到的大小。

150可能會因系統而異,但我不相信它。

+0

感謝您的迴應,史蒂夫。是的,我沒有提到單位換算。但恐怕問題不在這裏。當輸入「寬度」和「高度」時,輸出模式不符合尺寸比例。 '331:413' ='692:862' = 0.80,但是'150:413' = 0.36 –

+0

我認爲它可能不是一個簡單的乘法(例如150)它遷徙需要像@JamieG提出的規模高度和規模寬度。不幸的是,我不知道如何應用他的代碼...... –

+0

這取決於在導出圖像之前將圖像恢復爲原始大小(如PPT構想的)是否重要。 –

相關問題