如何将范围值转换为双精度值(VBA)

时间:2015-02-05 19:58:14

标签: vba excel-vba excel-2013 excel

所以我想创建一个在单元格中取值来进行计算的函数,但每当我尝试从单元格中获取值而不是硬编码时,我得到 #VALUE!错误。然而,当值被硬编码时,这不会发生。

我认为这是因为Range.Value返回Variant,但我不知道如何将数据转换为double,以便函数正常工作。

Function IfMissionarySupplies(Missionary_Type As String) As Double
Wb = ThisWorkbook 'Wb is a global variable.
Dim Elder_Supplies, Sister_Supplies As Double
Elder_Supplies = Workbooks(Wb).Worksheets("Control Variables").Range("C11").Value
Sister_Supplies = Workbooks(Wb).Worksheets("Control Variables").Range("C14").Value
If Missionary_Type = "Sisters" Then
    IfMissionarySupplies = Sister_Supplies
    Exit Function
ElseIf Missionary_Type = "Elders" Then
    IfMissionarySupplies = Elder_Supplies
End If 
End Function

我在互联网上一遍又一遍地搜索,但无济于事。我也是VBA的新手,因此对于经验丰富的VBA开发人员来说,我可能会忽略一些显而易见的事情。

谢谢!

1 个答案:

答案 0 :(得分:0)

我将以下内容放在标准模块中:

Function IfMissionarySupplies(Missionary_Type As String) As Double
    Wb = ThisWorkbook.Name 'Wb is a global variable.
    Dim Elder_Supplies, Sister_Supplies As Double

    Elder_Supplies = Workbooks(Wb).Worksheets("Control Variables").Range("C11").Value
    Sister_Supplies = Workbooks(Wb).Worksheets("Control Variables").Range("C14").Value

    If Missionary_Type = "Sisters" Then
        IfMissionarySupplies = Sister_Supplies
        Exit Function
    ElseIf Missionary_Type = "Elders" Then
        IfMissionarySupplies = Elder_Supplies
    End If
End Function

并按如下方式设置工作表:

enter image description here

所以 UDF 的上述版本似乎确实有效!