【问题标题】:Executing a macro upon changing a text field在更改文本字段时执行宏
【发布时间】:2018-01-31 16:45:33
【问题描述】:

我正在设计一个必须受到保护的文档,以便用户只能编辑某些字段。我需要在更改原始分数时自动执行一个计算分数描述的宏。我目前正在使用“富文本内容控件”来允许用户输入数字分数。

我正在使用以下宏代码:

Sub UpdateDescriptor()
Dim TheFinalScore As String
TheFinalScore = ActiveDocument.Bookmarks("FinalScore3").Range.Text

Dim BMRange As Range
Set BMRange = ActiveDocument.Bookmarks("FinalScore2").Range

If IsNumeric(TheFinalScore) Then
    Select Case TheFinalScore
        Case 1 To 1.5: BMRange.Text = "Outstanding"
        Case 1.51 To 2: BMRange.Text = "Excellent"
        Case 2.01 To 2.5: BMRange.Text = "Average"
        Case 2.51 To 3: BMRange.Text = "Below Average"
        Case Is > 3: BMRange.Text = "Unsatisfactory"
        Case Else: BMRange.Text = "Invalid Final Score"
    End Select
Else
    BMRange.Text = "Invalid Final Score"
End If
    ActiveDocument.Bookmarks.Add "FinalScore2", BMRange
End Sub

手动运行宏可以正常工作,但我无法找到任何方法在更改时自动执行宏。

我也尝试过使用旧版“文本表单域”。我可以让宏在进入时触发,但不能退出。关于如何让“富文本内容控件”在退出时触发宏的任何想法?或者让“文本表单域”在退出时触发?我还注意到“文本表单字段”属性中指定的数字格式没有被强制执行。

谢谢!

【问题讨论】:

  • FWIW,使用一个表单域,它的'计算退出属性集,整个事情可以在不需要宏的情况下完成。这一切都可以通过字段编码来完成。这也有一个优点,即您的进程不会受制于启用/禁用宏的用户。

标签: vba ms-word


【解决方案1】:

将此代码添加到 ThisDocument 模块:

Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
    Dim TheFinalScore As String

    TheFinalScore = ContentControl.Range.Text
    ...
    ...

我认为其余的会很明显。如果您需要区分更多控件,请使用 ContentControl.ID

【讨论】:

  • 这足以让我到达那里。谢谢!我能够使用“富文本内容控件”。唯一剩下的问题是我注意到使用大于 10 的 FinalScore 不能正确分类。例如,10.2 显示为“优秀”,20 显示为“平均”。看起来它在第一个整数处强制使用小数。
  • 尝试使用 CDbl(TheFinalScore) 将文本转换为数字。在国际环境中,您还需要跟踪正在使用的十进制符号。
猜你喜欢
  • 1970-01-01
  • 2012-03-28
  • 2016-04-19
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多