【问题标题】:A value used in the formula is of wrong data type when calling a UDF调用 UDF 时,公式中使用的值的数据类型错误
【发布时间】:2013-01-05 18:30:07
【问题描述】:

我一直在努力找出这里出了什么问题。我有两个包含字符串值的列。我使用第三列在工作表中调用 UDF,但最终得到 #Value 并出现错误 - “公式中使用的值的数据类型错误”。

例如:

 Col I   Col J
 File1    Y
 File1    N
 File2    Y
 File3    N

我尝试调试它,输入值被很好地传递到函数变量中。 我对VBA的了解有限,希望大家能帮我解决这个问题。

工作表中调用的函数:

=FileCheck(I3,I3:J38)

代码:

Public Function FileCheck(V As Range, Q As Range) As String
    Dim vtest As Variant
    Dim i, j, stat As Integer

    stat = 0

    vtest = Q

    For i = 1 To UBound(vtest)
        If V = vtest(i, 1) And vtest(i, 2) = "N" Then

            For j = 1 To UBound(vtest)
                If V = vtest(j, 1) And vtest(j, 2) = "Y" Then

                    FileCheck = "Y"
                    stat = 1
                End If
            Next
            If stat = 0 Then
                FileCheck = "N"
                End
            Else: End
            End If


        ElseIf V = vtest(i, 1) And vtest(i, 2) = "Y" Then
            FileCheck = "Y"
        End If
    Next

End Function

【问题讨论】:

  • 您能否单步执行您的代码并提供导致错误的行?
  • 仅供参考:在这一行Dim i, j, stat As Integer,您只是将stat 定义为一个整数。 ij 将被定义为变体,因为在逗号分隔它们之前没有 AS 语句
  • 感谢您,我认为这是声明变量的简单途径,但没有意识到这总是会将它们声明为变量。

标签: function vba excel syntax-error


【解决方案1】:

您收到该错误是因为您使用的是End

你想关机的时候是点击Start Menu ~~> Shut down还是直接拔掉电源线? :-)

使用End 与拉电缆非常相似。不要使用End。优雅地退出函数。 End 语句基本上是一种使程序崩溃的方法,但不会显示任何错误消息。

试试这个。替换这些行

If stat = 0 Then
    FileCheck = "N"
    End
Else: End
End If

If stat = 0 Then FileCheck = "N"
Exit Function

编辑

顺便说一句,你是不是想在Col J 中找到Col I 的对应值?如果是,那么您不需要 UDF。你可以使用Vlookup()

使用这个公式=VLOOKUP(I3,I3:J38,2,0) 而不是=FileCheck(I3,I3:J38)

【讨论】:

  • 谢谢。我现在使用了 Exit 函数,它完美地返回了值。我不只是尝试进行 vlookup,我还打算遍历数据,将值 N 更改为 Y,如果 Col 的任何值我具有与值 Y 和 N 相同的文件名。
【解决方案2】:

我认为您的第一个输入类型应该是字符串而不是范围:

V as string

另外,当你想结束函数时,你需要使用exit function,但是我不确定你是想结束函数,结束 if 语句还是 for 循环?

【讨论】:

  • 我已经用 Exit for 替换了 end 语句(也用 exit 函数测试过),结果按预期返回。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多