谁能告诉我这个 vb.net 代码有什么问题?

Can anyone tell me what is wrong with this vb.net code?

提问人:stevie 提问时间:8/14/2023 最后编辑:stevie 更新时间:8/14/2023 访问量:72

问:

我写了以下内容。

Imports System.Runtime.InteropServices
Imports Excel = Microsoft.Office.Interop.Excel

Public Function EachSubTotal(ByVal x As Excel.Range, ByVal y As Excel.Range) As Double
    Dim ReturnValue As Double
    Dim Done As Boolean
    Done = False
    ReturnValue = -1

    If y.Value2 = "*" And IsNumeric(x.Value2) Then
        ReturnValue = x.Value2 / 1.1025
        Done = True
    ElseIf (y.Value2 >= 0) And IsNumeric(x.Value2) Then
        ReturnValue = x.Value2 * (1 - y.Value2)
        Done = True
    ElseIf (y.Value2 < 0) And IsNumeric(x.Value2) Then
        ReturnValue = x.Value2 * (1 + y.Value2)
        Done = True
    End If

    If Not Done And String.IsNullOrEmpty(x.Value2) Then
        ReturnValue = -2
    End If

    Return Math.Round(ReturnValue, 2)

End Function

现在的问题是,一旦 y 有一些数值,我就会得到 #Value 错误。为什么? 提前致谢

以上代码将在导入到Excel的dll中使用。

因此,我为可能遇到类似问题的其他人发布此内容。

 Public Function EachSubTotal(ByVal x As Excel.Range, ByVal y As Excel.Range) As Double
    Dim ReturnValue As Double
    Dim Done As Boolean
    Done = False
    ReturnValue = -1

    If IsNumeric(y.Value2) Then
        If (y.Value2 >= 0) And IsNumeric(x.Value2) Then
            ReturnValue = x.Value2 * (1 - y.Value2)
            Done = True
        Else
            ReturnValue = x.Value2 * (1 + y.Value2)
            Done = True
        End If
    Else
        If y.Value2 = "*" And IsNumeric(x.Value2) Then
            ReturnValue = x.Value2 / 1.1025
            Done = True
        End If
    End If

    If Not Done And String.IsNullOrEmpty(x.Value2) Then
        ReturnValue = -2
    End If

    Return Math.Round(ReturnValue, 2)

End Function
Excel vb.net

评论

0赞 derpirscher 8/14/2023
你确定确实是数字吗?因为如果不是,而且也与你不同,试着把它与一个数字进行比较,这当然会失败并导致错误y.Value2"*"
2赞 jmcilhinney 8/14/2023
您需要调试您的代码,并在必要时向我们报告您的发现。
0赞 Black cat 8/14/2023
相反,请尝试此操作y.Value2 = "*"y.Value2.ToString = "*"
0赞 stevie 8/14/2023
谢谢,伙计们。更具体地说,当 y.Value2 的值为“*”时,它可以正常工作。当单元格为空时,它也可以正常工作。但是一旦我输入一些数字,它就会显示 #value 错误。我已经为此工作了几天,它只是让我毫无头绪。
3赞 jmcilhinney 8/14/2023
你的行为就好像你是一个用户,只是报告你在UI中看到的内容。您不是用户。你是开发人员。您需要使用可用的开发工具。调试代码。查看代码在您描述的特定实例中实际执行的操作。如果你不知道如何调试,那就停止你正在做的事情,先学习它,然后应用你在这里学到的东西。您应该能够告诉我们每个变量的值,以及发生错误时通过代码执行的确切路径。在发布问题之前,您应该能够告诉我们这一点。

答: 暂无答案