假设我有TextRange
个对象,我需要找到包含Shape
的{{1}}。
通常,我可以使用TextRange
的{{1}}属性来获取包含它的Parent
,然后再次使用TextRange
属性来获取TextFrame
1}}。
但,如果文字位于表格单元格内,则Parent
的{{1}}属性为Shape
。 (我认为这是PowerPoint 2010的“功能”)。 编辑:除非通过Selection.TextRange访问TextRange,否则不是这样。
还有其他方法可以识别形状(在本例中是表格单元格)吗?
更新:感谢KazJaw,我再次看了一遍,结果发现我可以导航Parent
链,除非{{1我是从TextRange
获得的。就我的目的而言,这不是一个问题。
答案 0 :(得分:1)
基于下面评论中的进一步讨论问题,似乎真正的问题是指选择对象。如果选择表格中的任何文本,则立即进行的某些测试会产生以下结果:
? Typename(ActiveWindow.Selection.TextRange)
TextRange
? Typename(ActiveWindow.Selection.TextRange.Parent)
Nothing
? Typename(ActiveWindow.Selection.TextRange.Parent.Parent)
'>>Error
其他信息也适用于其他程序员。以下我发现有点混乱做一些测试来回答这个问题。 (对于简单的演示文稿,一张幻灯片,其中一个表格和一些填充文本的单元格)
Sub Test_To_SO()
Dim SL As Slide
Set SL = ActivePresentation.Slides(1)
Debug.Print TypeName(SL.Shapes(1).Table.Cell(1, 1).Shape.TextFrame.TextRange.Parent)
'result >> TextFrame
Debug.Print TypeName(SL.Shapes(1).Table.Cell(1, 1).Shape.TextFrame.TextRange.Parent.Parent)
'result >> Shape
Debug.Print TypeName(SL.Shapes(1).Table.Cell(1, 1).Shape.TextFrame.TextRange.Parent.Parent.Parent)
'result >> Slide !!
End Sub
答案 1 :(得分:0)
并不是因为你无法通过选择到达那里,有时候你选择了什么。对象模型已破坏表格单元格中的文本。如上所述,ActiveWindow.Selection.TextRange.Parent不为选定的表格单元格文本返回任何内容。
其他文字:
Sub GetParentShape()
Dim oSh As Shape
With ActiveWindow.Selection
'Type might be None, Slides or one of the following:
If .Type = ppSelectionShapes Then
Set oSh = ActiveWindow.Selection.ShapeRange(1)
End If
If .Type = ppSelectionText Then
Set oSh = ActiveWindow.Selection.TextRange.Parent.Parent
End If
Debug.Print oSh.Name
End With
End Sub