“运行时错误1004,无法获取WorksheetFunction类的Match属性”

问题描述 投票:0回答:1

[enter image description here我正在尝试使两个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
excel vba userform
1个回答
2
投票

每次激活用户窗体-触发UserForm_Activate事件:

Private Sub UserForm_Activate()

将清除您的组合框:

Me.valuerFirmCB.Clear

如果隐藏了表单,并且在激活前ComboBox具有一些选定的值,则此操作将触发ComboBox_Change事件:

Private Sub valuerFirmCB_Change()

并将valuerFirmCB.Value设置为""(什么都没有,如您在屏幕快照中所见)。

由于您的Me.valuerFirmCB.Clear是ComboBox_Change事件,因此会触发该事件并尝试查找""值,这会在匹配函数中生成错误。另外,如果您只是手动从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,则不会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.