VBAfunction没有被执行

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

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 

我从一个子模块调用它,但它不被执行。 如果我去debuggingdebugging器只跳转到下一个语句,而不进入函数。 我不明白为什么

编辑

正如很多人所build议的,我发布了调用函数的模块。 这是一个button点击function。 文件和图纸被正确select。 我知道这是因为最后一个句子(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 

您还需要set范围

 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是正确的,function应该看起来像他指出的,这只是问题的一部分。 我不明白为什么,但是在调用函数之前卸载表单使得解释器不能执行这个函数。 似乎所有依赖于表单的variables都随表单一起被卸载。 这对我来说没有什么意义,但是它是这样工作的。

所以调用函数的正确方法是:

 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的答案。