使用VBA计算Word中的平均值

时间:2018-03-09 07:13:12

标签: vba ms-word

我在Word中有几个文本框,我想计算平均值并在另一个文本框中打印此平均值。值是数字。

我之前的代码工作正常,但前提是没有值被删除或更改。 VBA中是否有更灵活的均值函数,如果文本框发生更改,它会始终自动更新?

这是我以前的代码:

Private Sub TextBox71_Change()
TextBox81.Text = Round(((CDbl(TextBox11.Text) + CDbl(TextBox21.Text) + CDbl(TextBox31.Text)) / 3), 2)
End Sub

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我还没有经过测试,我怀疑你需要完全引用的对象,而不仅仅是TextBox21等,但是我所提出的想法看起来如下所示;返回类型的字符串。

Private Sub TextBox11_Change()
    TextBox81.Text = CalculateMean
End Sub

Private Sub TextBox21_Change()
    TextBox81.Text = CalculateMean
End Sub

Private Sub TextBox31_Change()
     TextBox81.Text = CalculateMean
End Sub

Public Function CalculateMean() As String

     If Len(TextBox11.Text) + Len(TextBox21.Text) + Len(TextBox31.Text) = 0 Then
        CalculateMean = vbNullString 'CalculateMean = "0"
     ElseIf TextBox11.Text = vbNullString Or TextBox21.Text = vbNullString Or TextBox31.Text = vbNullString Then
        CalculateMean = CStr(Round(((CDbl(IIf(TextBox11.Text = vbNullString, 0, TextBox11.Text)) + CDbl(IIf(TextBox21.Text = vbNullString, 0, TextBox21.Text)) + CDbl(IIf(TextBox31.Text = vbNullString, 0, TextBox31.Text))) / 2), 2))
     Else
       CalculateMean = CStr(Round(((CDbl(TextBox11.Text) + CDbl(TextBox21.Text) + CDbl(TextBox31.Text)) / 3), 2))
    End If
End Function

答案 1 :(得分:0)

如果您使用的是formfields而不是ActiveX文本框,则可以在没有单行VBA代码的情况下完成该批次 - 这也意味着用户不需要允许您的宏运行。 Mac上也不支持ActiveX。

要了解如何使用字段编码在Word中进行各种其他计算,请查看我的 Microsoft Word字段数学教程,位于:

http://windowssecrets.com/forums/showthread.php/154369-Microsoft-Word-Field-Maths-Tutorial

或:

http://www.gmayor.com/downloads.htm#Third_party