excel - “运行时错误 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
解决方案
每次你激活你的 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
.