2016-06-28 34 views
0

我從excel中工作,並且我在一個目錄中的循環中打開幾個powerpoint,以vba的形式。 雖然我運行宏(來自excel),但我在powerpoint演示文稿中的每個幻燈片內的每個形狀內都會製作一個循環。從excel中,在vba中,獲取在powerpoint中選擇的當前形狀的標識

我停止宏以查看AutoShapeType = -2,並且我在vba中選擇它只是爲了檢查形象是否是我想要的形狀。 否則,如果選定的形狀看起來不正確,我會手動選擇它,並且我想知道如何獲取當前選定形狀的id,以命名它。

Set PPtapp = CreateObject("Powerpoint.Application") 
PPtapp.Visible = True 
Dim sld As Slide 
Dim numslide As Long 
Dim nbslide As Long 
Dim WVL_CptShape As Integer 

'list of every powerpoint path 
ppt = ThisWorkbook.Worksheets("Template").Range("A" & i).Value 

For i = 2 To ThisWorkbook.Worksheets("Template").Range("A65536").End(xlUp).Row + 1 
    Set PptDoc = PPtapp.Presentations.Open(ppt) 
    With PptDoc 
     For Each sld In PptDoc.Slides 
      For WVL_CptShape = 1 To .Slides(sld.SlideNumber).Shapes.Count 
       WVL_Id = .Slides(sld.SlideNumber).Shapes(WVL_CptShape).ID 
       If PptDoc.Slides(sld.SlideNumber).Shapes(WVL_CptShape).AutoShapeType = -2 Then 
        'I select the shape to see visualy if it's a good selection and I stop the macro 
        PptDoc.Slides(sld.SlideNumber).Shapes(WVL_CptShape).Select 
        Stop 
        'if the selection doesnt seems right I select the right shape manualy 
        'Question : in vba, i want to change the name of the selected shape. 
        'But i don't know how to get the id of the current selected shape (see below : ID_OF_CURRENT_SHAPE_SELECTED_MANUALY) 
        'I would like to rename it, in order to recognize it easily next time 
        PptDoc.Slides(sld.SlideNumber). Shapes(ID_OF_CURRENT_SHAPE_SELECTED_MANUALY).Selection.Name = "Myshape" 
       end if 
      Next WVL_CptShapeNext 
     sld.Close 
    End With 
Next 
PPtapp.Quit 
Set PPtapp = Nothing 
+0

您是否正在尋找一種方法來讀取所有形狀的Shape.Type在所有幻燈片中? –

+0

我正在尋找獲得選定形狀的說明:如果1形狀(例如形狀ID 1)爲AutoShapeType = -2,我停止所有形狀。如果這個形狀不是我想要的形狀。我選擇另一個形狀(例如形狀ID 2)(在幻燈片上手動),並且我希望宏獲得新的一個ID形狀(形狀ID 2)。謝謝:) – stan

回答

0
Set PptDoc = PPtapp.Presentations.Open(ppt) 
    With PptDoc 
     For Each sld In PptDoc.Slides 
      For WVL_CptShape = 1 To sld.Shapes.Count 
       WVL_Id = sld.Shapes(WVL_CptShape).ID 
       If sld.Shapes(WVL_CptShape).AutoShapeType = -2 Then 
        'I select the shape to see visualy if it's a good selection and I stop the macro 
        sld.Shapes(WVL_CptShape).Select 
        Stop 

' And to change the name of the shape: 
sld.Shapes(WVL_CptShape).Name = "New name for shape" 
' or better, in case you selected a different shape: 

ActiveWindow.Selection.ShapeRange(1)請將.Name = 「爲造型的新名稱」

在這種類型的情況下,要與形狀的指數,而不是它的ID工作。

請注意,您可以遍歷幻燈片中的形狀集合,就像您可以遍歷演示文稿中的幻燈片集合一樣。它使代碼更容易編寫和遵循:

Set PptDoc = PPtapp.Presentations.Open(ppt) 
With PptDoc 
    For Each sld In PptDoc.Slides 
     For each shp in sld.shapes 
      If shp.AutoShapeType = -2 Then 
       'I select the shape to see visualy if it's a good selection and I stop the macro 
       shp.Select 
       Stop 
+0

感謝您分享您的知識。我有一個使用ActiveWindow方法的問題。我在Windows 7 Enterprise中使用Excel 2007。我應該宣佈什麼? – stan

+0

實際情況是,無論我在幻燈片中選擇什麼,宏在停止指令之前都會重命名形狀。謝謝:) – stan

+0

編輯您的原始文章以包含您的代碼的當前版本,並指出您提及的「問題」以及它發生的代碼行。包括您看到的任何錯誤消息的確切文本。 –

相關問題