[我正在尝试使两个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具有一些选定的值,则此操作将触发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
,则不会发生这种情况。