我有一个包含大约50张幻灯片的PowerPoint.每张幻灯片可能有一个或多个由reviwer提供的注释(使用insert-> comment菜单完成).
我试图使用此VBA代码以编程方式将注释导出到文本文件中:
Sub ConvertComments()
''# Converts new-style comments to old
Dim oSl As Slide
Dim oSlides As Slides
Dim oCom As Comment
Set oSlides = ActivePresentation.Slides
For Each oSl In oSlides
For Each oCom In oSl.Comments
''# write the text to file : (oCom.Text)
WriteToATextFile oCom.Author, <what needs to come here>, oCom.Text
Next oCom
Next oSl
End Sub
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我需要提供注释上下文以及写入文本文件(幻灯片中的哪一行被选中并评论)
问题:我可以使用任何属性来获取此信息吗?
在大多数情况下shape.Parent,幻灯片包含形状.
但是,如果您尝试删除一个组,然后按下撤消(形状将重新出现),但子形状将为两个.Parent和组件抛出异常.ParentGroup.
如何在上面的案例中找到形状的幻灯片ID?
ShellExecute()每次我的PowerPoint幻灯片放映中出现一张新幻灯片时,我最终想要做的是一个命令行程序.我正在使用Office 2003 PowerPoint.
我做了以下事情:
工具>选项>安全选项>宏安全>安全级别=中
工具>选项>宏> VBA编辑器:
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
MsgBox ("OnSlideShowPageChange")
End Sub
Run Code Online (Sandbox Code Playgroud)文件>保存
返回PowerPoint :( F5适用于幻灯片放映>查看显示).没有看到消息框
退出PowerPoint,F5再次重新打开.ppt文件.仍然没有看到消息框
问题:我错过了什么?为什么OnSlideShowPageChange在我运行幻灯片放映时没有被调用?
我有一大堆powerpoint文件,我想从中提取所有文本,然后将它们全部集成到一个大文本文件中.每个源(PPT)文件都有多个页面(幻灯片).我不关心格式化 - 只关心单词.
我可以通过PPT中的^ A ^ C手动执行此操作,然后在记事本中使用^ V; 然后在PPT中向下翻页,并对powerpoint中的每张幻灯片重复.(太糟糕了,我不能只做一个会抓住一切的^ A然后我可以使用sendkey来复制/粘贴)
但是有数百个PPT具有不同数量的幻灯片.
看起来这似乎是一件普通的事情,但我无法在任何地方找到一个例子.
有没有人有示例代码来执行此操作?
如果你知道它有没有办法获得一个形状Id?
例如:
Dim myshape As Shape
myshape.Id = 42
myshape = getShapeById(myshape.Id)
Run Code Online (Sandbox Code Playgroud)
或者,或者,我可以通过Name?
Dim myshape As Shape
myshape.Name = "Rectangle 42"
myshape = getShapeByName(myshape.Name)
Run Code Online (Sandbox Code Playgroud) 我在Windows XP的Excel 2007中编写了VBA宏,用于将数据从excel电子表格复制到PowerPoint演示文稿中。在全新安装的Windows 7上运行启用了宏的电子表格时,该电子表格将失败。因此,我提取了无法找出问题的代码,并且在尝试打开现有的powerpoint文件时似乎失败了。我尝试在Office 2010和Office 2007中都运行此代码。
我正在尝试使用的代码(如下所示的问题部分)
Sub test()
Dim PowerPointApplication As PowerPoint.Application
Dim PowerPointFile As PowerPoint.Presentation
Set PowerPointApplication = CreateObject("PowerPoint.Application")
Set PowerPointFile = PowerPointApplication.Presentations.Open("PATH_TO_FILE\test.pptx")
End Sub
Run Code Online (Sandbox Code Playgroud)
宏在上面的Presentations.Open行上失败,出现以下错误
Run-time error '-2147467259 (80004005)':
Method 'Open' of object 'Presentations' failed
Run Code Online (Sandbox Code Playgroud)
我已经在电子表格的VBEditor的引用设置中启用了PowerPoint 12.0对象库。所有其他引用都与在Windows XP框上正常运行的文件完全匹配。
我在网上寻找了答案,却找不到任何东西。我阅读了一些有关Windows 7和脱机文件的信息,因此尝试将其关闭但没有帮助。
我也以管理员用户身份登录,并尝试将要打开的pptx也移动到其他目录,但没有成功。
我正在运行以下版本的Windows:
Windows 7 Professional
Service Pack 1
64 Bit
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
我有一个150张幻灯片的powerpoint演示文稿,我想根据公司的品牌重塑努力进行修改.我们以前的绿松石色已用于文字,线条,形状和形状填充.我想构建一个贯穿整个演示文稿的VBA脚本,并一举修改所有幻灯片,并用我们新的深灰色替换这种蓝色.
旧的企业颜色是RGB(0,176,240) - 绿松石
新的企业颜色是RGB(71,67,65) - 深灰色
我在互联网上尝试过多种不同的vba,但无法让它正常工作.以下是旧颜色的典型幻灯片的屏幕截图 - 所有蓝色项目都应更改为深灰色:

来自一个有用的论坛成员的这段VBA代码非常适合填充形状 - 如果可以重新设计包含任何文本和形状轮廓和线条,那么它将是完美的.
Sub ChangeShapeColor()
Dim oSh As Shape
Dim oSl As Slide
' Look at each slide in the current presentation:
For Each oSl In ActivePresentation.Slides
' Look at each shape on each slide:
For Each oSh In oSl.Shapes
' IF the shape's .Fill.ForeColor.RGB = turqoise color:
If oSh.Fill.ForeColor.RGB = RGB(0, 176, 240) Then
' Change it to corporate dark grey:
oSh.Fill.ForeColor.RGB = RGB(71, 67, 65)
End If
Next …Run Code Online (Sandbox Code Playgroud) PowerPoint 2016具有一项新颖的新功能,您可以在其中插入“缩放幻灯片/部分”。如果您不知道我在说什么,请参见此处:https : //support.office.com/en-us/article/Use-Zoom-for-PowerPoint-to-bring-your-presentation-to-life -9d6c58cd-2125-4d29-86b1-0097c7dc47d7
我正在尝试使此过程自动化,因为每个演示文稿我会使用此功能20-30次。为了获得可见性,我要自动化的工作流程如下:
我已经在VBA宏中有了第1-4步,但是我不知道是否有一个vba命令来插入幻灯片缩放。我担心的是,由于此功能是2016年的新功能,因此VBA中还没有。
有谁知道VBA命令行可以自动执行上述第5步?
提前致谢!
文森特
我是Powerpoint VBA的新手,想知道是否有一种简短的方法可以将一个文本范围从PowerPoint A传输到另一个位于Powerpoint B中的文本范围.
第a1页= b1
第a2页= b2
第a3页= b3
模板正在改变,我需要调整100个幻灯片的5个powerpoint,所以我认为使用这个解决方案会更容易.
预先感谢您的帮助.
精度:我不想复制和粘贴文本范围,而是复制范围内的文本以将其置于新范围内.请在下面找到我已经拥有的代码,但它并没有'将它粘贴到我的新范围内.
Sub copier_texte() 'je veux copier le contenu de la forme, et non pas la forme en entier
Dim nb_slide As Integer
nb_slide = ActivePresentation.Slides.Count
With ActivePresentation
.Slides(1).Shapes(2).TextFrame.TextRange.Copy 'je sélectionne uniquement le contenu de la forme
For i = 2 To .Slides.Count
.Slides(i).Select
ActiveWindow.View.Paste
Next i
End With
End Sub
Run Code Online (Sandbox Code Playgroud) 如果您运行以下代码,您将获得非常有趣的结果(仅运行PowerPoint,在运行之前关闭所有Excel实例):
'Optional - Include the "Microsoft Excel 16.0 Object Library"
Option Explicit
Public Sub test()
Dim oslide As slide
Set oslide = ActivePresentation.Slides.add(1, ppLayoutBlank)
Dim oshape As Shape
Set oshape = oslide.Shapes.AddOLEObject(30, 30, 50, 50, "Excel.Sheet")
oshape.OLEFormat.Object.Sheets(1).ListObjects.add(1) 'xlSrcRange
oshape.OLEFormat.Object.Sheets(1).Cells(1, 1) = "fewewq"
oshape.OLEFormat.Object.Close
End Sub
Run Code Online (Sandbox Code Playgroud)
成功创建嵌入对象,并且表与指定数据一起出现.但是,当您单击嵌入的对象时,您会收到以下错误:
没有足够的可用内存来读取工作表.
无法再以任何其他方式访问此对象,并且在关闭/打开文档并重新启动时,对象的损坏性质仍然存在.我已经验证了这个问题发生在我测试过的所有系统上(PowerPoint/Excel 2016,Windows 7 X64).
所以我的问题是,其他人是否可以重现这一点,如果是这样,为什么会发生这种情况呢?如果将"单元格(1,1)"行更改为"单元格(2,1)"没有问题,就好像编辑表格的头部会导致某些特殊行为与编辑行或其他细胞.
实际上还没有写到这一点,大部分内容与此特定问题无关.
这篇文章声称这是一个安装太多字体(> 600)的问题.我测试了这个,我只安装了241个......
还有一些职位完全无关,又不配发去那里.
我在MS Word中测试了相同的代码,似乎工作正常,问题似乎与PowerPoint隔离
我已经尝试在代码(破碎的对象)中执行一个版本,而另一个手动(工作对象),保存它们并比较二进制输出(仅嵌入对象).这听起来很酷,但它并没有给我任何更深刻的见解.我无法单独使用Excel打开嵌入对象,因为对象似乎以专有格式存储.二进制的中心区域看起来不同,但我不确定如何或为什么.到目前为止,我还没有发现将其解码为人类可读信息的方法.
经过一段显着的延迟和适当的归属后,我已将此问题交叉发布到Microsoft论坛 …
powerpoint-vba ×10
powerpoint ×8
vba ×8
excel ×2
excel-vba ×1
ole ×1
strip ×1
text ×1
windows-7 ×1