【问题标题】:MS Word Document Form - Check Value of Text Form Field on ExitMS Word 文档表单 - 退出时检查文本表单字段的值
【发布时间】:2016-01-29 21:00:52
【问题描述】:

我正在 Microsoft Word 中创建表单。我有几个“文本表单字段”,我想限制其中一些,以便用户只能输入数字。我不明白为什么微软在仍然允许输入任何值的情况下为您提供将“类型”更改为“数字”的选项。由于似乎是这种情况,因此我转向了 VBA。

我正在尝试在用户退出这些字段之一时运行宏,以确保输入有效。我宁愿不为要限制为数字的每个字段创建新宏。

我认为我的问题是我不知道如何获得当前字段的结果。我可以为每个字段创建不同的宏,并通过显式指定其名称来获得结果,但似乎存在更智能的方法。

这是我目前所拥有的。

Sub validateNumericFields()
 'Check to see if the value in the current field is numeric
 'If it is not, send a message to the user, and set value to default value

 If IsNumeric(Selection.Fields(1).Result) = False Then
   MsgBox "You must enter a valid number.", vbExclamation
   Selection.Fields(1).Result = Selection.Fields(1).TextInput.Default
 End If
End Sub

【问题讨论】:

  • 在我们讨论您的问题之前,我们需要确保我们理解它。您似乎是在“混合和匹配”术语,这使得很难确定您拥有什么。 “用户表单”是一个 VBA 表单;它有“文本框控件”。 Word 文档可以作为表单进行保护,并具有“文本表单域”。你有后者而不是前者对吗?
  • 是的,后者是正确的。我没有使用 VBA 创建输入字段。我已将“旧版文本表单域”插入到 Word 文档中,并将限制编辑,因此用户只能编辑表单域。
  • 您使用的是哪个版本的 Word?当我将文本框表单字段的类型设置为数字时,它不会让我在其中输入文本。文本变为 0(零)。
  • 我有 Word 2010。如果我使用 Tab 键导航到下一个字段,那么如果类型设置为数字,则文本将变为零。但是,如果我使用光标导航到备用字段,那么文本仍然存在。
  • 您能否更具体地说明“使用我的光标”是什么意思?

标签: vba ms-word


【解决方案1】:

有多种方法可以获取表单域的“名称”,因为这也是一个书签。 FormField 对象确实有一个 Name 属性,但我无法从 OnExit 运行时可用的 Selection 对象获取它。但是我可以得到书签名称,所以:

Sub validateNumericFields()
  'Check to see if the value in the current field is numeric
  'If it is not, send a message to the user, and set value to default value
  Dim ff As word.FormField
  Set ff = ActiveDocument.FormFields(Selection.Bookmarks(1).Name)

  If IsNumeric(ff.Result) = False Then
     MsgBox "You must enter a valid number.", vbExclamation
     ff.Result = ff.TextInput.Default
  End If
End Sub

【讨论】:

  • 谢谢!所以这确实有效,但我不得不将我的字段类型更改为“常规文本”而不​​是数字。如果我将类型保留为数字,那么如果我使用光标导航到另一个字段,它并不总是有效,就像我在问题的评论中描述的那样。将类型设置为常规文本,它可以始终如一地工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多