【问题标题】:PowerPoint - How to display the Value from Slide 1 ComboBox in following slides?PowerPoint - 如何在以下幻灯片中显示幻灯片 1 组合框中的值?
【发布时间】:2018-08-19 04:10:11
【问题描述】:

我想在第一张幻灯片上选择演示文稿的“类型”,例如 ActiveX 组合框中的“私人”、“公共”、“机密”等,并将所选值显示在未来幻灯片的底部ActiveX 文本框。

我的幻灯片 1 组合框工作正常。我运行演示文稿,获得焦点,下拉并选择我的值。它是 ComboBox1。

我似乎找不到在以后的幻灯片中引用该值的技巧。 vb 的新手。不确定我是否正确使用了 PowerPoint vb 编辑器。似乎我的代码/值仅限于当前幻灯片,而不是未来的幻灯片。

在幻灯片 2 上,我定义了 TextBox1。我可以通过 TextBox1.Value = "This is a " & ComboBox1 & " 幻灯片来获取它的值。但显示的只是“这是一张幻灯片”。我已经尝试了所有方法,但找不到引用第一张幻灯片 ComboBox1 值的方法,但我做不到。

有可能吗?

谢谢!

正在插入源代码。

这是在幻灯片 1 上工作。

Option Explicit
Private Sub ComboBox1_GotFocus()
If ComboBox1.ListCount = 0 Then AddDropDownItems
MsgBox "Currently:" & ComboBox1.Value
End Sub

Sub AddDropDownItems()
ComboBox1.AddItem "Private"
ComboBox1.AddItem "Confidential"
ComboBox1.AddItem "Secret"
ComboBox1.AddItem "Public"
ComboBox1.AddItem "Test"
ComboBox1.ListRows = 5
End Sub

Private Sub ComboBox1_LostFocus()
MsgBox "Changed to:" & ComboBox1.Value
End Sub

这不适用于幻灯片 2:

Private Sub TextBox1_Change()
TextBox1.Value = "Change: " & 
ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Value & 
"is the Type"
End Sub

【问题讨论】:

  • 如果您在代码模块中使用Option Explicit?如果没有,您是否会因为ComboBox1 可能超出范围而收到错误消息?
  • 我没有使用 Option Explicit。似乎是这样。我会试试的。
  • 试过了。使用 ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Value 作为字段得到“在 Shapes 集合中找不到项目 ComboBox1”。我应该在离开 Slide1 之前创建一个与该字段相同的新字段吗?
  • 修改您的问题以包含您尝试使用的代码 :) 更容易提供帮助
  • 已修订。谢谢!

标签: vba powerpoint


【解决方案1】:

听起来您已经完成了大部分工作,只需要知道如何从组合框中提取所选值,所以:

Private Sub ComboBox1_Change()
    MsgBox ActivePresentation.Slides(1).Shapes("ComboBox1").OLEFormat.Object.Value
End Sub

【讨论】:

  • 收到“在 Shapes 集合中找不到项目 ComboBox1”错误。现在尝试使用 Option Explicit。
  • Option Explicit 对“不是 Shapes 集合”错误没有帮助。也许我会尝试在幻灯片 1 中添加一个变量,使其等于您的表达式,然后看看是否可以在后面的幻灯片中使用。
【解决方案2】:

如果您的意图是让幻灯片 1 上的 ComboBox 设置幻灯片 2 上的 TextBox 中的文本,那么您需要您的代码来执行此操作。 TextBox_Change 事件不会触发,除非您手动编辑它的文本(我测试了您的代码,它可以达到这种效果,但这可能不是您想要的)。所以,问题是您永远不会为幻灯片 2 上的 TextBox 分配任何值。

您可能可以删除幻灯片 2 上的 TextBox_Change 事件过程,我怀疑您只是将其用于调试目的。

使用 ComboBox_Change 事件将文本分配给幻灯片 2 上的 TextBox 对象。将此代码添加到您的 Slide1 模块中:

Private Sub ComboBox1_Change()
    ActivePresentation.Slides(2).Shapes("TextBox1").OLEFormat.Object.Value = Me.ComboBox1.Value
End Sub

应用于所有后续幻灯片:

Private Sub ComboBox1_Change()
    Call UpdateOtherSlides()
End Sub
Private Sub UpdateOtherSlides()
    Dim s as Long
    Dim text as String
    Text = Me.ComboBox1.Value
    For s = 2 to ActivePresentation.Slides.Count
        On Error Resume Next 'In case no "TextBox1" exists on the slide
        ActivePresentation.Slides(s).Shapes("TextBox1").OLEFormat.Object.Value = text
    Next

End Sub

NBOption Explicit 是一种强制您声明所有变量的方法。它不会针对任何工作表的Shapes 编译字符串文字名称,但它会阻止您在不存在此类对象的幻灯片模块中使用像ComboBox1 这样的变量名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2019-07-07
    • 2011-03-01
    相关资源
    最近更新 更多