首页 > 解决方案 > “运行时错误 1004,无法获取 WorksheetFunction 类的匹配属性”

问题描述

在此处输入图像描述我试图让这两个都是comboboxes(valuerFirmCB, valuerNameCB)动态的,即valuerNameCB只会根据公司显示名称。

它可以工作,但是在将条目添加到电子表格后出现错误"Run-time error 1004, Unable to get Match Property of the WorksheetFunction class"

Private Sub UserForm_Activate()

Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Valuer_Details")

Dim i As Integer

Me.valuerFirmCB.Clear
For i = 1 To Application.WorksheetFunction.CountA(sh.Range("1:1"))
Me.valuerFirmCB.AddItem sh.Cells(1, i).Value

Next i
End Sub

Private Sub valuerFirmCB_Change()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Valuer_Details")
Dim i As Integer
Dim n As Integer

n = Application.WorksheetFunction.Match(valuerFirmCB.Value, sh.Range("1:1"), 0)

Me.valuerNameCB.Clear
For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
    Me.valuerNameCB.AddItem sh.Cells(i, n).Value

Next i

End Sub

标签: excelvbauserform

解决方案


每次你激活你的 UserForm - 你触发一个 UserForm_Activate 事件:

Private Sub UserForm_Activate()

这清除了您的组合框:

Me.valuerFirmCB.Clear

如果表单被隐藏并且 ComboBox 在激活之前选择了某个值,则此操作会触发 ComboBox_Change 事件:

Private Sub valuerFirmCB_Change()

并将其设置valuerFirmCB.Value""(无,如您在屏幕截图中看到的那样)。

由于您Me.valuerFirmCB.Clear是 ComboBox_Change 事件,因此会触发事件并尝试查找该""值,这会在 match 函数中生成错误。valuerFirmCB此外,如果您只是手动删除所选值,则会引发此错误。

处理此问题的方法是添加一个简单的检查,Private Sub valuerFirmCB_Change()如下所示:

If Not valuerFirmCB.Value = "" Then
    n = Application.WorksheetFunction.Match(valuerFirmCB.Value, sh.Range("1:1"), 0)

    Me.valuerNameCB.Clear
    For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
        Me.valuerNameCB.AddItem sh.Cells(i, n).Value

    Next i
End If

valuerNameCB所以只有当有一些价值时才会执行搜索。

根据评论添加

Form.Show 0我已经在工作表和表单上使用带有代码的附加按钮复制了这种情况Form.Hide。在表单和工作表之间切换没有任何作用,但是如果您在 ComboBox 中选择一个项目,隐藏表单并再次显示 -Me.valuerFirmCB.Clear将触发更改事件。但是,如果我使用Unload Me而不是Form.Hide.


推荐阅读