Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 调用UDF时,公式中使用的值的数据类型错误_Function_Vba_Excel_Syntax Error - Fatal编程技术网

Function 调用UDF时,公式中使用的值的数据类型错误

Function 调用UDF时,公式中使用的值的数据类型错误,function,vba,excel,syntax-error,Function,Vba,Excel,Syntax Error,我一直在努力找出这里出了什么问题。我有两个包含字符串值的col。我使用第三列调用工作表中的UDF,但最终得到#Value with error—“公式中使用的值的数据类型错误” 例如: 我试着调试它,输入值被很好地传递到函数变量中。 我在VBA方面的知识有限,希望你们能帮助我解决这个问题 在工作表中调用的函数: =FileCheck(I3,I3:J38) Public Function FileCheck(V As Range, Q As Range) As String Dim vt

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

例如:

我试着调试它,输入值被很好地传递到函数变量中。 我在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
代码:

=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

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

V as string

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

由于您使用的是
end
,因此会出现该错误

当您想关闭计算机时,是单击
开始菜单~~>关机
还是直接拔出电源线:-)

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

试试这个。更换这些线路

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

编辑

顺便说一句,您是否试图在
Col J
中找到
Col I
的对应值?如果是,则不需要自定义项。您可以使用
Vlookup()


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

您可以单步检查您的代码并提供导致错误的行吗?仅供参考:在这一行
Dim i,j,stat As Integer
,您仅将
stat
定义为整数
i
j
将被定义为变量,因为在分隔它们的逗号之前没有as语句。为此,我将此作为声明变量的简单方法,但没有意识到这将始终将它们声明为变量。谢谢。我现在使用了Exit函数,它完全返回值。我不仅仅是想做一个vlookup,我还打算循环遍历数据,将值N更改为Y,如果Col的任何值与值Y和N具有相同的文件名。我已经用Exit for替换了end station(也使用Exit函数测试),结果将按预期返回。谢谢