问题描述
背景:一种专有的兽医软件会生成一个文件,该文件预先填充了包含特定患者数据的合并字段。 我感兴趣的字段是重量,但它是一个字符串 (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