"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
.
,则不会发生这种情况
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
.