您可以通过名称访问的形状,如:
Dim oSlide As Slide
Set oSlide = ActivePresentation.Slides(1)
Dim oShape As Shape
Set oShape = oSlide.Shapes(strShapeName)
Dim oTextRange As TextRange
Set oTextRange = oShape.TextFrame.TextRange
oTextRange.Text = "this is some text"
oTextRange.Font.Bold = msoTrue
注意,无论你正在寻找做,只是记录你通过UI做一个宏,并复制。你说得对,录制的宏将使用Selection
对象很多,但是这很容易固定 - 我们只需要到相应的Shape
对象(或其他)的引用,然后替补多,在生成的代码。
因此,举例来说,如果改变形状的填充颜色所录制的宏是这样的:
With ActiveWindow.Selection.ShapeRange
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.Fill.Transparency = 0#
End With
...你想填充颜色应用到你已经有一个形状参考为oShape
,然后将代码改成这样:
With oShape
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.RGB = RGB(255, 0, 0)
.Fill.Transparency = 0#
End With
要得到的形状的当前名称,你可以在“立即”窗口中的VBA编辑器输入:
?ActiveWindow.Selection.ShapeRange(1).Name
你可以把它转换成一个(单)宏很容易:
Sub ShowMeTheName()
MsgBox ActiveWindow.Selection.ShapeRange(1).Name
End Sub
注意,我会亲自命名的形状为有意义的,而不是使用默认的名称。只需在即时窗口中执行此操作:
ActiveWindow.Selection.ShapeRange(1).Name = "MyName"
...或者创建一个宏来提示输入名称。
哇...这是一个很好的答案。除了你知道你在说什么这个事实之外,你把它分解成像我这样的黑客! 非常感谢您的帮助! – Justin 2009-07-29 17:31:01
所以我用这个,它工作得很好,但我不能改变一个子程序中的多个文本框。我试图通过: 暗淡oShape1为形状 暗淡oTextRange1为TextRange的,等等等等 但它仍然只是改变所选的第一个文本框,与第二选择/写文本字符串 我做错了什么? – Justin 2009-07-29 19:17:34
哎呀,没关系......我错过了一个。现在明白了!再次感谢这有助于我在正确的方向朝大好时机前进! – Justin 2009-07-29 19:19:31