【问题标题】:VBA for altering PowerPoint 2003 Presentations- Active not new用于更改 PowerPoint 2003 演示文稿的 VBA - 活动不是新的
【发布时间】:2010-11-14 21:32:07
【问题描述】:

如果我在 PowerPoint 幻灯片上设置了一个包含我需要的所有文本框的模板,我应该使用什么 Visual Basic 在这些文本框中输入我想要的文本?

使用模板对我来说更容易,因为这些ppt简介包含(或需要包含)大量数据:

  • 如何在这些文本框中输入文本
  • 如何更改特定文本框的字体、大小、粗体等?
  • 除了在宏之后录制宏并选择文本框之外,是否有其他方法可以确定文本框/形状(“文本框 52”)的“名称”,只是为了从选择中获取对象名称?
  • 如果我使用宏来确定 vba,为什么不能将它用作 vba?我从宏中得到的 vb 似乎有 active.selection,它似乎不能作为 vba 程序工作,因为它不知道选择什么????我认为

我要做的是使用模板从访问中创建最终游戏 ppt。在访问表单上,我希望有多个文本框,将信息传递到幻灯片上的 ppt 文本框。

我知道如何从 access 启动模板(或新演示文稿),以及如何添加新项目(幻灯片、图表、图表、文本),但我不知道如何更改预先存在的文本框!!

请帮助....我的工作就像昨天一样需要这个!

一如既往的感谢!

【问题讨论】:

    标签: ms-access vba powerpoint


    【解决方案1】:

    您可以按名称访问形状,如下所示:

    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"
    

    ...或创建一个宏来提示输入名称。

    【讨论】:

    • 哇...这是一个很好的答案。除了您知道自己在说什么之外,您还因为像我这样的黑客而破坏了它!非常感谢您的帮助!
    • 所以我使用了它并且效果很好,但我不能在子过程中更改多个文本框。我试过:dim oShape1 as Shape dim oTextRange1 as TextRange,依此类推,但它仍然只改变第一个选定的文本框,第二个选定/写入的文本字符串我做错了吗?
    • 哎呀没关系...我错过了一个。现在明白了!再次感谢这有助于我朝着正确的方向前进!
    【解决方案2】:

    当我需要自动化 Word 或 Excel 时(我认识或合作过的人都没有使用 PowerPoint),我打开相关应用程序,打开宏录制并执行我想要自动化的任务。然后我使用生成的代码作为我的访问代码的基础。这通常是一个非常简单的过程,有时就像复制和粘贴一样简单,然后在每一行前面加上我在 Access 中使用的应用程序对象。

    如果我必须做你正在做的事情,那正是我开始的方式,通过记录交互执行的任务,然后试验代码的哪一部分是必不可少的。

    【讨论】:

    • 谢谢。这实际上是我最近一直在做的事情,到目前为止它在大多数事情上都运行良好。我只是不知道如何找出有问题的对象的名称,上面的代码解决了这个问题,所以我走了....谢谢大家!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 2011-03-06
    • 1970-01-01
    • 2011-07-08
    • 2020-07-12
    • 1970-01-01
    • 2017-05-30
    相关资源
    最近更新 更多