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