我的目的是打开现有的PowerPoint演示文稿以及现有的Excel工作簿,然后从Excel运行VBA宏,这将更新PowerPoint中的相应值。
为此我通过突出显示特定的文本框并使用Format -> Align
确定了我要在PowerPoint中更新的相应文本框的形状名称。然后我在Excel中创建了3列,其值为:
Slide index Shape name Value
1 Title 2 =CONCATENATE("REPORT ";YEAR(TODAY()))
1 Placeholder for date1 =TODAY()
我使用宏(遗憾的是我不记得我从哪个网站复制过它):
Sub writedata()
Dim c As Object
Dim shapeslide
Dim shapename
Dim shapetext
Set ppapp = GetObject(, "Powerpoint.application")
Set pppres = ppapp.ActivePresentation
For Each c In Blad2.Range("a2:a" & Blad2.Range("a" & Rows.Count).End(xlUp).Row)
shapeslide = Blad2.Range("a" & c.Row)
shapename = Blad2.Range("b" & c.Row)
shapetext = Blad2.Range("c" & c.Row).Text
pppres.Slides(shapeslide).Shapes(shapename).TextEffect.Text = shapetext
Next
End Sub
我的问题是Slide 1
根本不会在相应的Shape name
中更新。我执行此宏时发生的唯一操作是,由于某种原因,Slide 3
将其字体大小修改为大小为35而不是大小16.我无法理解为什么正在发生。更改字体大小的形状的形状名称既不会写入Excel工作簿,也不会与Excel中编写的形状名称相同。
希望有人可以对此有所了解。
答案 0 :(得分:2)
让我们获取excel列出的幻灯片和形状,以确保它们符合您的期望。有时他们真的被奇怪地命名/ IDed。既然你有幻灯片没有改变那应该和幻灯片改变不应该...我们肯定需要重复检查这些。这将遍历每张幻灯片和该幻灯片上的每个形状,并列出幻灯片ID和名称以及每个形状ID和名称。我有一个演示文稿,第一张幻灯片是幻灯片297由于某种原因。然后滑块250是第二个。幻灯片50是第3名。其余的都编号奇怪。 o.O
打开immediates窗口以查看调试文本。
Sub SlidesShapes()
Dim i As Integer, j As Integer
Set ppapp = GetObject(, "PowerPoint.Application")
Set ppres = ppapp.ActivePresentation
For i = 1 To ppres.Slides.Count'slides and shapes start counting at 1 not 0
Debug.Print ppres.Slides(i).SlideID
Debug.Print ppres.Slides(i).Name
For j = 1 To ppres.Slides(i).Shapes.Count
Debug.Print ppres.Slides(i).Shapes(j).ID
Debug.Print ppres.Slides(i).Shapes(j).Name
Next
Next
End Sub
此外,当您单步执行原始代码(而不是此代码段)时,您在本地窗口中看到的每个步骤是什么?那里有什么奇怪的东西跳出来对你?任何填充了意外或不完全正确的变量?