将字符串转换为双精度单词(VBA)

时间:2019-12-17 19:07:18

标签: vba ms-word

我正在尝试将Word文档中的文本转换为双精度,所以我可以对其进行货币格式化。我从邮件合并中收到此文本。如何创建可以接收此文本并将其作为数字返回的宏? 我不熟悉单词和VBA脚本。到目前为止,我所做的是

myfile.close()

我不确定如何调用此宏。因为它带有参数,所以它不会显示在宏表中。 我可能对如何将文本转换成双字完全不满意,但是可以提供任何帮助。 谢谢。请澄清任何评论。

2 个答案:

答案 0 :(得分:2)

您不需要宏!!!您需要做的就是学习如何在Word字段中使用格式开关。

要控制Word中的数字和货币格式,请将数字图片开关添加到mergefield。为此:

  • 选择合并字段;
  • 按Shift-F9键显示字段编码。它看起来应该像{MERGEFIELD MyData};
  • 编辑该字段,以便获得{MERGEFIELD MyData#$,0.00}(或您喜欢的任何其他数字格式-参见下文);
  • 将光标置于此字段中的任何位置,然后按F9键对其进行更新。

注1:该字段中的“#$,0.00”称为数字图片开关。其他可能性包括:

  • #0表示四舍五入的整数
  • #,0为带有千位分隔符的舍入整数
  • #,0.00表示精确到小数点后两位的数字,带有千位分隔符
  • #$,0为带有千位分隔符的四舍五入整数
  • #“ $,0.00;($,0.00);'-'”表示货币,括号内带有负数,连字符表示0个值

注2::显示值的精度由“ 0.00”控制。您可以使用0到0.000000000000000之间的任何值。 如果您使用最后的';'在格式化开关中没有任何跟随符的情况下(例如#“ $,0.00;($,0.00);”),零值将被抑制。请注意,这会抑制由空字段和包含0的字段导致的0。

注3::如果您使用小数点制表符或右对齐制表符来对齐值,请将开关括在引号中(即#“ $,0.00”),然后在该字段中插入一个制表符在$符号后的代码中,您可以输出带有$符号后出现小数点的数值。

有关更多邮件合并提示和技巧,请参阅:https://www.msofficeforums.com/mail-merge/21803-mailmerge-tips-tricks.html

答案 1 :(得分:0)

如果要将数字转换为Double数据类型,请尝试以下操作:

Function StringToDouble(ByVal baseString As String) As Double
    StringToDouble = VBA.CDbl(baseString)
End Function

如果您只关心格式化货币,则将字符串转换为Currency数据类型,如下所示:

Function StringToCurrency(ByVal baseString As String) As Currency
    StringToCurrency = VBA.CCur(baseString)
End Function

您仍然需要格式化数字,但是两个功能都为您提供了可以格式化的数字。

以下是一个示例,该示例还为您提供了一个格式为USD的字符串(例如$ 4,999.75)。它需要上面的StringToCurrency函数。

Sub test()
    Dim stringNum As String
    stringNum = "4,999.754501"
    Debug.Print "stringNum=" & stringNum                ' outputs 4,999.754501

    Dim currencyNum As Currency
    currencyNum = StringToCurrency(stringNum)           ' outputs 4999.7545
    Debug.Print "currencyNum=" & currencyNum

    Dim formattedString As String
    formattedString = Format$(currencyNum, "$#,##0.00")
    Debug.Print "formattedString=" & formattedString    ' outputs $4,999.75
End Sub