Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Excel UDF在VBA中调用很好,但在工作表中调用时返回空白_Excel_Vba_Custom Functions Excel - Fatal编程技术网

Excel UDF在VBA中调用很好,但在工作表中调用时返回空白

Excel UDF在VBA中调用很好,但在工作表中调用时返回空白,excel,vba,custom-functions-excel,Excel,Vba,Custom Functions Excel,我在一个模块中有一个函数,在子模块中调用时运行良好,但在工作表中使用时,除了空格外,我什么也得不到。功能应具有3个输入。一个输入决定了要检查的工作表,然后找到与其他两个条件匹配的行。我使用了一个调用函数的sub,并提供了一个带有结果的msgbox,这是正确的。但在工作表中,相同的输入导致空白单元格 Function ToolStatus(PartNumber As String, Model As String, Number As Integer) As String Dim SearchSh

我在一个模块中有一个函数,在子模块中调用时运行良好,但在工作表中使用时,除了空格外,我什么也得不到。功能应具有3个输入。一个输入决定了要检查的工作表,然后找到与其他两个条件匹配的行。我使用了一个调用函数的sub,并提供了一个带有结果的msgbox,这是正确的。但在工作表中,相同的输入导致空白单元格

Function ToolStatus(PartNumber As String, Model As String, Number As Integer) As String
Dim SearchSheet As Worksheet
Dim PN As Integer
Dim MdlCol As Integer
Dim Mdl As String
Dim Result As Integer
Dim FinalRow As Integer
Dim i As Integer
Application.ScreenUpdating = False
Select Case True
    Case Number < WorksheetFunction.CountA(Sheet2.Range("B:B")) And Model = "1A"
        Set SearchSheet = Sheet2
        PN = 2
        MdlCol = 4
        Mdl = "1A"
        Result = 19
    Case Number < WorksheetFunction.CountA(Sheet2.Range("B:B")) And Model = "1B"
        Set SearchSheet = Sheet2
        PN = 2
        MdlCol = 5
        Mdl = "1B"
        Result = 19
    Case Number < WorksheetFunction.CountA(Sheet2.Range("B:B")) And Model = "1C"
        Set SearchSheet = Sheet2
        PN = 2
        MdlCol = 6
        Mdl = "1C"
        Result = 19
    Case Number < WorksheetFunction.CountA(Sheet3.Range("B:B")) And Model = "1A"
        Set SearchSheet = Sheet3
        PN = 3
        MdlCol = 17
        Mdl = "-1A"
        Result = 4
    Case Number < WorksheetFunction.CountA(Sheet3.Range("B:B")) And Model = "1B"
        Set SearchSheet = Sheet3
        PN = 3
        MdlCol = 18
        Mdl = "-1B"
        Result = 4
    Case Number < WorksheetFunction.CountA(Sheet3.Range("B:B")) And Model = "1C"
        Set SearchSheet = Sheet3
        PN = 3
        MdlCol = 19
        Mdl = "-1C"
        Result = 4
End Select
SearchSheet.Select
FinalRow = Cells(Rows.Count, 2).End(xlUp).Row

For i = 2 To FinalRow
    If Cells(i, PN) = PartNumber And Cells(i, MdlCol) = Mdl Then
        ToolStatus = Cells(i, Result).Value
        Exit For
    End If
Next i
Application.ScreenUpdating = True
End Function
函数工具状态(零件号为字符串、模型为字符串、数字为整数)为字符串
将搜索表设置为工作表
作为整数的Dim PN
Dim MdlCol作为整数
将Mdl设置为字符串
将结果设置为整数
将FinalRow设置为整数
作为整数的Dim i
Application.ScreenUpdating=False
选择Case True
案例编号
搜索表。选择

不能在名为UDF的函数中执行此操作。 有关详细信息,请参阅

不过,您不需要选择工作表-只需使用

FinalRow = SearchSheet.Cells(Rows.Count, 2).End(xlUp).Row 

(与以下代码类似)

搜索表。选择

不能在名为UDF的函数中执行此操作。 有关详细信息,请参阅

不过,您不需要选择工作表-只需使用

FinalRow = SearchSheet.Cells(Rows.Count, 2).End(xlUp).Row 

(与以下代码类似)

Application.screenUpdate=False
。。在UDF中,我认为这不是一个好主意。
Application.screenUpdate=False
。。在UDF,我认为这不是个好主意。非常感谢。我已删除“选择”命令,并按照您的指定进行替换。不幸的是,结果仍然是空白。当您声明“和以下代码类似”时,还有什么改变了工作表的环境?我明白您的意思,并对引用“单元格”的其他位置进行了相同的更正。非常感谢。非常感谢你。我已删除“选择”命令,并按照您的指定进行替换。不幸的是,结果仍然是空白。当您声明“和以下代码类似”时,还有什么改变了工作表的环境?我明白您的意思,并对引用“单元格”的其他位置进行了相同的更正。非常感谢。