【问题标题】:VBA function not being executedVBA 函数未执行
【发布时间】:2014-12-17 17:01:54
【问题描述】:

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

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

【问题讨论】:

  • 能否贴出调用该函数的代码部分?
  • 如果在父子/函数上跳过该函数,您应该查看父子/函数而不是上面的。正如@TheEngineer 建议的那样,发布调用上述函数的部分
  • 不是这就是问题所在,但您可能想要exit for,因为您可能会覆盖早期的结果

标签: excel vba


【解决方案1】:

您还需要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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 如果您的代码在用户表单模块中,那么调用 unload 可能实际上是exit subing。尝试隐藏表单,激活您的工作表然后卸载表单
    • 进行了快速测试,在代码块中间卸载表单并没有停止执行之后的语句。不过,最好不要在完成之前卸载表单。
    • 但是我调用的函数也在“代码块”的形式中,所以也许这就是问题所在。我不知道我是否将函数移动到它可以工作的主模块。
    • 如果您的功能没有明确地绑定到用户表单,将其放在模块中通常是一个不错的计划。您的表格是否经常使用?可能会尝试隐藏它而不是卸载它。
    猜你喜欢
    • 2019-09-29
    • 1970-01-01
    • 2020-07-16
    • 2013-11-29
    • 2016-09-30
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多