Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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 未执行VBA函数_Excel_Vba - Fatal编程技术网

Excel 未执行VBA函数

Excel 未执行VBA函数,excel,vba,Excel,Vba,我试图创建一个函数,在给定的单元格范围内查找一个值,但它没有被执行。它应该返回找到值的单元格 Function searchInRange(where As Range, what As String) As Range For Each c In where.Cells Debug.Print (c.Value) If c.Value = what Then searchInRange = c End If Next c End Function 我从一个

我试图创建一个函数,在给定的单元格范围内查找一个值,但它没有被执行。它应该返回找到值的单元格

Function searchInRange(where As Range, what As String) As Range
For Each c In where.Cells
 Debug.Print (c.Value)
    If c.Value = what Then
        searchInRange = c
    End If
Next c

End Function
我从一个子模块调用它,但它没有被执行。如果我去调试,调试器只跳到下一条语句,而不在函数中输入。我不明白为什么

编辑

正如许多人所建议的,我正在发布调用函数的模块。这是一个按钮点击功能。已正确选择文件和图纸。我之所以知道这一点,是因为最后一句(PE_Sheet.activate)是正确的。问候

Private Sub CommandButton1_Click()
Dim PE_File As Workbook
Dim PE_Sheet As Worksheet
Dim cell As Range


Set PE_File = Workbooks(getSelectedWorkbook())
Set PE_Sheet = PE_File.Worksheets("Monitored")
Unload UserForm1

searchAlarmFilter PE_Sheet.Range("A:A"), "5184"

PE_Sheet.Activate
End Sub

您还需要设置范围

Public Function sir(where As Range, what As String) As Range
Dim res As Range: Set res = Nothing
For Each c In where.Cells
    Debug.Print c.Value
    If c.Value = what Then
        Set res = c
        Exit For
    End If
Next
Set sir = res
End Function

您还需要设置范围

Public Function sir(where As Range, what As String) As Range
Dim res As Range: Set res = Nothing
For Each c In where.Cells
    Debug.Print c.Value
    If c.Value = what Then
        Set res = c
        Exit For
    End If
Next
Set sir = res
End Function

您还需要设置范围

Public Function sir(where As Range, what As String) As Range
Dim res As Range: Set res = Nothing
For Each c In where.Cells
    Debug.Print c.Value
    If c.Value = what Then
        Set res = c
        Exit For
    End If
Next
Set sir = res
End Function

您还需要设置范围

Public Function sir(where As Range, what As String) As Range
Dim res As Range: Set res = Nothing
For Each c In where.Cells
    Debug.Print c.Value
    If c.Value = what Then
        Set res = c
        Exit For
    End If
Next
Set sir = res
End Function

因为NickSlash是正确的,函数应该像他指出的那样,这只是问题的一部分。我不明白为什么,但是在调用函数之前卸载表单会使解释器不执行函数。似乎所有以任何方式依赖于表单的变量都随表单一起卸载。这对我来说没有多大意义,但它是这样工作的

因此,调用函数的正确方法是:

Private Sub CommandButton1_Click()
Dim PE_File As Workbook
Dim PE_Sheet As Worksheet
Dim cell As Range


Set PE_File = Workbooks(getSelectedWorkbook())
Set PE_Sheet = PE_File.Worksheets("Monitored")
searchAlarmFilter PE_Sheet.Range("A1:A500"), "5184"
Unload UserForm1



PE_Sheet.Activate
End Sub

有关函数的正确版本,请参阅NickSlash的答案。

由于NickSlash是正确的,并且函数应该与他指出的一样,这只是问题的一部分。我不明白为什么,但是在调用函数之前卸载表单会使解释器不执行函数。似乎所有以任何方式依赖于表单的变量都随表单一起卸载。这对我来说没有多大意义,但它是这样工作的

因此,调用函数的正确方法是:

Private Sub CommandButton1_Click()
Dim PE_File As Workbook
Dim PE_Sheet As Worksheet
Dim cell As Range


Set PE_File = Workbooks(getSelectedWorkbook())
Set PE_Sheet = PE_File.Worksheets("Monitored")
searchAlarmFilter PE_Sheet.Range("A1:A500"), "5184"
Unload UserForm1



PE_Sheet.Activate
End Sub

有关函数的正确版本,请参阅NickSlash的答案。

由于NickSlash是正确的,并且函数应该与他指出的一样,这只是问题的一部分。我不明白为什么,但是在调用函数之前卸载表单会使解释器不执行函数。似乎所有以任何方式依赖于表单的变量都随表单一起卸载。这对我来说没有多大意义,但它是这样工作的

因此,调用函数的正确方法是:

Private Sub CommandButton1_Click()
Dim PE_File As Workbook
Dim PE_Sheet As Worksheet
Dim cell As Range


Set PE_File = Workbooks(getSelectedWorkbook())
Set PE_Sheet = PE_File.Worksheets("Monitored")
searchAlarmFilter PE_Sheet.Range("A1:A500"), "5184"
Unload UserForm1



PE_Sheet.Activate
End Sub

有关函数的正确版本,请参阅NickSlash的答案。

由于NickSlash是正确的,并且函数应该与他指出的一样,这只是问题的一部分。我不明白为什么,但是在调用函数之前卸载表单会使解释器不执行函数。似乎所有以任何方式依赖于表单的变量都随表单一起卸载。这对我来说没有多大意义,但它是这样工作的

因此,调用函数的正确方法是:

Private Sub CommandButton1_Click()
Dim PE_File As Workbook
Dim PE_Sheet As Worksheet
Dim cell As Range


Set PE_File = Workbooks(getSelectedWorkbook())
Set PE_Sheet = PE_File.Worksheets("Monitored")
searchAlarmFilter PE_Sheet.Range("A1:A500"), "5184"
Unload UserForm1



PE_Sheet.Activate
End Sub


有关函数的正确版本,请参阅NickSlash的答案。

您可以发布调用该函数的代码部分吗?如果在父子函数上跳过该函数,您应该查看父子函数而不是上面的函数。正如@TheEngineer所建议的,发布调用上述函数的部分并不是因为这是问题所在,而是您可能希望退出,因为您可能会覆盖早期的结果。您可以发布调用该函数的代码部分吗?如果在父子/函数上跳过该函数,您应该查看父子/函数,而不是上面的。正如@TheEngineer所建议的,发布调用上述函数的部分并不是因为这是问题所在,而是您可能希望退出,因为您可能会覆盖早期的结果。您可以发布调用该函数的代码部分吗?如果在父子/函数上跳过该函数,您应该查看父子/函数,而不是上面的。正如@TheEngineer所建议的,发布调用上述函数的部分并不是因为这是问题所在,而是您可能希望退出,因为您可能会覆盖早期的结果。您可以发布调用该函数的代码部分吗?如果在父子/函数上跳过该函数,您应该查看父子/函数,而不是上面的。正如@TheEngineer所建议的,发布调用上述函数的部分并不是因为这是问题所在,而是您可能希望
exit for
,因为您有覆盖早期结果的风险。如果您的代码位于userform模块中,则调用unload可能实际上是
exit sub
ing。尝试隐藏表单,激活表单,然后卸载窗体进行快速测试,在代码块的中间卸载表单并没有停止执行语句。尽管如此,在完成之前最好不要卸载表单。但是我调用的函数也在表单“代码块”中,所以这可能就是问题所在。我不知道我是否将函数移动到主模块,它可能会工作。如果您的函数没有显式地绑定到用户表单,那么将其放在模块中通常是一个不错的计划。你的表格经常被使用吗?可能会尝试隐藏它而不是卸载它。如果您的代码在userform模块中,那么调用卸载可能实际上是
exit sub
ing。尝试隐藏表单,激活表单,然后卸载窗体进行快速测试,在代码块的中间卸载表单并没有停止执行语句。尽管如此,在完成之前最好不要卸载表单。但是我调用的函数也在表单“代码块”中,所以这可能就是问题所在。我不知道我是否将函数移动到主模块,它可能会工作。如果您的函数没有显式地绑定到用户表单,那么将其放在模块中通常是一个不错的计划。你的表格经常被使用吗?可能会尝试隐藏它而不是卸载它。如果您的代码在userform模块中,那么调用卸载可能实际上是
exit sub
ing。尝试隐藏表单,激活您的sh