"Run-time error 1004, Unable to get Match Property of the WorksheetFunction class"

"Run-time error 1004, Unable to get Match Property of the WorksheetFunction class"

我正在尝试让两个 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

每次激活用户窗体时,都会触发一个 UserForm_Activate 事件:

Private Sub UserForm_Activate()

清除组合框:

Me.valuerFirmCB.Clear

如果表单被隐藏并且 ComboBox 在激活之前有一些值 selected:

,则此操作依次触发 ComboBox_Change 事件
Private Sub valuerFirmCB_Change()

并将 valuerFirmCB.Value 设置为 ""(无,如您在屏幕截图中所见)。

由于您的 Me.valuerFirmCB.Clear 是一个 ComboBox_Change 事件,因此事件被触发并试图找到 "" 值,这会在匹配函数中产生错误。此外,如果您只是手动从 valuerFirmCB 中删除 selected 值,也会抛出此错误。

处​​理此问题的方法是向 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有一定的价值时才会进行搜索。

根据评论添加

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

,则不会发生这种情况