微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA 中定义的 MS Word DocVariables 的问题

如何解决VBA 中定义的 MS Word DocVariables 的问题

背景:一种专有的兽医软件会生成一个文件,该文件预先填充了包含特定患者数据的合并字段。 我感兴趣的字段是重量,但它是一个字符串 (Top_Stat),看起来像“24.5 kg”。

我创建了一个脚本来读取该字段并将其转换为整数。但是,我现在想根据动物体重使用这个整数来计算男性药物剂量。 为此创建文档变量,但变量(名称和值)存储在文档中。我希望至少删除该值,但似乎无法使用以下脚本获得结果。

Sub GetWeight()
 ActiveDocument.Variables("WeightInKg").Delete
 WeightInt = ActiveDocument.MailMerge.DataSource.datafields("Top_Stat").Value

 WeightInt = Replace(WeightInt," kg","") 'This removes the superfluous text
 WeightInt = Val(WeightInt) 'This converts the weight into a number (integer)
 
 ActiveDocument.Variables.Add Name:="WeightInKg",Value:=WeightInt 'Add the Word variable
 ActiveDocument.Fields.Update
 
End Sub

我错过了什么?抱歉,我是 VBA 新手。

解决方法

您的代码需要一些错误检查。第一次运行文件变量“WeightInKg”不存在,当你去删除它时,例程出错了。

文档变量,不要与 VBA 混淆 子例程变量不是 Word 文档字段,因此除非您有更新所有字段的其他原因,否则不需要该代码行。

最后,您应该始终声明您的 VBA 子程序变量。

我已经修改了您的代码,但无法对其进行全面测试,因为我没有您的邮件合并数据源……但请尝试一下,看看它现在是否适合您。

Sub AutoOpen()
    Call GetWeight
End Sub


Sub GetWeight()
    Dim WeightIn As Long
    On Error Resume Next
    ActiveDocument.Variables("WeightInKg").Delete
    On Error GoTo ErrHandler
    WeightInt = ActiveDocument.MailMerge.DataSource.DataFields("Top_Stat").Value
    
    WeightInt = Replace(WeightInt," kg","") 'This removes the superfluous text
    WeightInt = Val(WeightInt) 'This converts the weight into a number (integer)
    
    ActiveDocument.Variables.Add Name:="WeightInKg",Value:=WeightInt 'Add the Word variable
'    ActiveDocument.Fields.Update
ErrHandler:
    If Err.Number > 0 Then
        MsgBox Err.Number & vbCr & Err.Description,vbCritical
        Err.Clear
    End If
End Sub

这是我尝试填充的 Word 文档的屏幕截图。 Screenshot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。