2

(これは主にPowerPoint 2007固有の問題のようで、PPT 2010では簡単に再現できません)

ローカルで複製する簡単な方法は次のとおりです。

1) Insert a shape into blank slide
2) Run command: ActivePresentation.Slides(1).Shapes(1).Delete in immediate window in Visual Studio. (You can alternatively delete through C#)
3) Undo the deletion in the PowerPoint presentation (do this non-programatically)

何らかの理由で、次のような呼び出しを使用してシェイプに再度アクセスすることはできません。

ActivePresentation.Slides(1).Shapes(1) //Does not allow any methods/properties to work

私がリモートで取得した唯一のことは、を介しSelection.ShapeRangeてアイテムへの参照を取得できることですが、ほとんどのプロパティ/メソッドは、そのオブジェクトを使用しようとするとComExceptionsをスローします。

形状を再取得する方法や、プレゼンテーションを更新してクリーンなComオブジェクトを取得する方法を知っている人はいますか?

4

3 に答える 3

1

Ppt2007 SP3 で確認できます。回避策として .cut and .paste を試してください。その後、他のメソッド/プロパティにアクセスできました。-乾杯、www.MSO-dlx.com

ActivePresentation.Slides(1).Shapes(1).Delete
Application.CommandBars.ExecuteMso "Undo" 'or manually Undo
ActiveWindow.Selection.SlideRange(1).Shapes(1).Cut 
ActiveWindow.Selection.SlideRange(1).Shapes.Paste
ActiveWindow.Selection.SlideRange(1).Shapes(1).TextFrame.TextRange.Text = "ABC"
于 2013-10-24T12:37:30.093 に答える
0

ちょうど今、私は問題をうまく解決しました。多くの助けとなった Web ページを共有してください: https://www.add-in-express.com/creating-addins-blog/2014/06/24/exception-hresult-0x800a01a8/

重要なポイントは、オブジェクトを削除した後にオブジェクトを解放することです。これは、Skovly とsharkTwo が行ったのとまったく同じです。ただし、C# を使用してこれを行う方法がわかりません。リンクから答えが得られました。

Marshal.ReleaseComObject(titleShape); titleShape = null;

ちょうどこのような。

于 2016-07-24T11:01:27.897 に答える
0

したがって、これが問題であることを確認できます。2010年でさえ、「より安い」代替案を見つけました:

Public Sub arf()

Dim arf As Slide
Dim shape As shape
Dim shapes As shapes

Set shapes = ActivePresentation.Slides(1).shapes
Set shape = shapes(2)
shape.Select

shape.Delete
Application.CommandBars.ExecuteMso "Undo"
MsgBox ("shape: " & shape.Name & ",Type: " & shape.Type)

Set shapes = ActivePresentation.Slides(1).shapes
Set shape = Nothing
Set shape = shapes(2)

' Cut and paste makes this work, but not required...
'shape.Select
'shape.Cut
'shapes.Paste

'Set shape = Nothing
'Set shape = shapes(2)

Set arf = shape.Parent
MsgBox ("slide: " & arf.Name)

End Sub
于 2014-01-16T16:42:44.517 に答える