【问题标题】:Word document text boxes "remember" what was in them previouslyWord 文档文本框“记住”之前的内容
【发布时间】:2018-06-29 02:02:30
【问题描述】:

我正在使用 VBA 用户表单随机生成要发送到 Word 文档中的值,以提供关于各种数学主题的随机问题(针对我的学生)。

这似乎工作得很好,除了当我退出用户窗体 (me.hide) 并发送值并且焦点回到文档中时,每次移动鼠标时之前的值仍然短暂可见。

这只会发生一瞬间。如果没有发生鼠标(或窗口滑块)活动,则会显示正确发送的值。如果我查看另一个应用程序并在那里进行一些活动,然后返回到 Word 文档,则显示也很好。

值的翻转在视觉上很烦人。有没有人遇到过类似的问题?

复制:

创建一个带有 ActiveX 文本框和按钮的 Word 文档。该按钮激活一个用户窗体,该用户窗体还包含一个文本框和一个按钮,用于将文本框值发送回文档中的文本框。

在我的情况下,当单击文档中的按钮时,表单打开并且值确实返回到 Word 文档,但是当滚动鼠标或移动窗口边缘的滑块时,文本中的前一个值框短暂地闪烁到视野中。以下是文档按钮的代码:

Private Sub cmdOk_Click()
  ThisDocument.TextBox1.Value = TextBox1.Value
  Me.Hide
End Sub

我使用的是 Word 2016 和 Windows 10。

我尝试使用“新”Word 文本框,但我不知道如何通过用户窗体与它们进行通信。使用“旧”文本框非常简单。

【问题讨论】:

  • 根据您提供的重现步骤(我已将其集成到您的问题中),我看不到您报告的内容。如果您包含有关调用用户窗体的代码以及所涉及的 Windows 和 Word 版本的信息,我很乐意再试一次。
  • 几点说明: 1) ActiveX 控件是为用户窗体设计的,只是偶尔为文​​档表面启用。由于这个事实,他们的行为有时可能是“奇怪的”。表单域或内容控件是为 Word 设计的,并且会更加稳定。 2)Word对显卡驱动要求很高。有时,更新驱动程序或关闭驱动程序的硬件加速会影响屏幕渲染质量。
  • 我正在使用 Word 2016 和 Windows 10。我尝试使用“新”Word 文本框,但我不知道如何从用户窗体与它们进行通信。使用“旧”文本框非常简单。
  • 你是说内容控件?
  • 你好辛迪。是的,开发人员选项卡上的内容控件。我无法弄清楚如何与这些控件进行通信,所以我使用了 activeX 解决方案。有没有更好的办法?谢谢。

标签: vba ms-word


【解决方案1】:

ActiveX 控件是为 VBA 用户窗体设计的。可以将它们插入 Word 文档或 Excel 电子表格的表面,但它们并不总是表现最佳。另一方面,内容控件(和遗留表单域)是为 Word 文档的表面而设计的。

为了写入内容控件,您可以使用如下代码:

ActiveDocument.SelectContentControlsByTitle("name").Item(1).Range.Text

更接近于您尝试识别内容控件的方法可能是:

ActiveDocument.SelectContentControlsByTitle(TextBox1.Name).Item(1).Range.Text = TextBox1.Value

为何如此复杂:设计内容控件的团队希望避免人们在使用书签和表单域时遇到的问题,即无法在文档中重复名称。可以为多个内容控件赋予相同的名称。所以不可能使用 Document.ContentControls("name") 来识别内容控件。

相反,需要使用Document.SelectContentControlByTitle,它返回一个内容控件数组。如果只有一个(或者如果您只想要一个),那么您可以添加 .Item([index]) 以直接获取单个内容控件。

您可以在用户窗体的文本框控件中查询其名称,而不是输入静态名称,如果这样更容易的话。

【讨论】:

  • 我尝试了这个解决方案,似乎可行。我只尝试了一个富文本框。当我尝试使用 2 个或更多文本框时,我无法让它工作。我不知道如何在 Word 文档中“命名”或命名我的文本框,然后如何在 VBA 代码中访问它们,就像使用 ActiveX 控件一样。
  • 您的问题不清楚@George。我建议您重新接受这个作为原始问题的答案,然后提出一个新问题。这样,您可以提供比评论更多的细节。提供一个你期望它应该做什么的例子,你尝试过的代码并解释它是如何不工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
相关资源
最近更新 更多