标签: powerpoint-vba

使用VBA从PowerPoint演示文稿中提取注释

我有一个包含大约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)

在上面的代码中,我需要提供注释上下文以及写入文本文件(幻灯片中的哪一行被选中并评论)

问题:我可以使用任何属性来获取此信息吗?

powerpoint powerpoint-vba

5
推荐指数
1
解决办法
4511
查看次数

shape.Parent不返回幻灯片

在大多数情况下shape.Parent,幻灯片包含形状.

但是,如果您尝试删除一个组,然后按下撤消(形状将重新出现),但子形状将为两个.Parent和组件抛出异常.ParentGroup.

如何在上面的案例中找到形状的幻灯片ID?

powerpoint powerpoint-vba

5
推荐指数
1
解决办法
743
查看次数

如何让Powerpoint在动画中调用我的VBA子程序?

ShellExecute()每次我的PowerPoint幻灯片放映中出现一张新幻灯片时,我最终想要做的是一个命令行程序.我正在使用Office 2003 PowerPoint.

我做了以下事情:

  1. 工具>选项>安全选项>宏安全>安全级别=中

  2. 工具>选项>> VBA编辑器:

    Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
      MsgBox ("OnSlideShowPageChange")
    End Sub
    
    Run Code Online (Sandbox Code Playgroud)
  3. 文件>保存

  4. 返回PowerPoint :( F5适用于幻灯片放映>查看显示).没有看到消息框

  5. 退出PowerPoint,F5再次重新打开.ppt文件.仍然没有看到消息框

问题:我错过了什么?为什么OnSlideShowPageChange在我运行幻灯片放映时没有被调用?

powerpoint vba powerpoint-vba

5
推荐指数
1
解决办法
2300
查看次数

从VBA中的powerpoint文件中提取所有文本

我有一大堆powerpoint文件,我想从中提取所有文本,然后将它们全部集成到一个大文本文件中.每个源(PPT)文件都有多个页面(幻灯片).我不关心格式化 - 只关心单词.

我可以通过PPT中的^ A ^ C手动执行此操作,然后在记事本中使用^ V; 然后在PPT中向下翻页,并对powerpoint中的每张幻灯片重复.(太糟糕了,我不能只做一个会抓住一切的^ A然后我可以使用sendkey来复制/粘贴)

但是有数百个PPT具有不同数量的幻灯片.

看起来这似乎是一件普通的事情,但我无法在任何地方找到一个例子.

有没有人有示例代码来执行此操作?

powerpoint vba text strip powerpoint-vba

5
推荐指数
1
解决办法
1万
查看次数

按ID或名称获取形状

如果你知道它有没有办法获得一个形状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)

powerpoint vba powerpoint-vba

5
推荐指数
2
解决办法
7万
查看次数

在Windows 7上打开PowerPoint演示文稿时VBA失败

我在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)

任何帮助,将不胜感激!

excel vba excel-vba windows-7 powerpoint-vba

5
推荐指数
1
解决办法
8514
查看次数

使用VBA更改Powerpoint 2013中幻灯片元素的颜色

我有一个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 vba powerpoint-vba powerpoint-2013

5
推荐指数
1
解决办法
1万
查看次数

使用vba在PowerPoint 2016中插入幻灯片缩放

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次。为了获得可见性,我要自动化的工作流程如下:

  1. 拍摄应用程序/屏幕截图
  2. 在PowerPoint中插入新的空白幻灯片
  3. 将屏幕截图粘贴到幻灯片中并调整大小/位置
  4. 隐藏新幻灯片
  5. 将屏幕快照幻灯片作为幻灯片缩放插入另一张幻灯片中

我已经在VBA宏中有了第1-4步,但是我不知道是否有一个vba命令来插入幻灯片缩放。我担心的是,由于此功能是2016年的新功能,因此VBA中还没有。

有谁知道VBA命令行可以自动执行上述第5步?

提前致谢!

文森特

vba powerpoint-vba

5
推荐指数
2
解决办法
856
查看次数

将文本范围从1个功率点传输到另一个功率点以更改模板

我是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 vba powerpoint-vba

5
推荐指数
1
解决办法
386
查看次数

Powerpoint VBA - 在嵌入式Excel OLE对象中编辑表的列名

如果您运行以下代码,您将获得非常有趣的结果(仅运行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论坛 …

excel powerpoint vba ole powerpoint-vba

5
推荐指数
1
解决办法
774
查看次数