无法获取工作表函数Class的匹配属性。

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

我正在尝试创建一个带有 "搜索 "功能的用户表单,但是 "搜索 "功能由于错误1004而无法运行。

错误运行时间错误1004-无法获取工作表函数类的匹配属性。

从网上看了很多资料,有的人建议改成 "搜索"。worksheetfucntion.matchapplication.match. 然而,该错误仍然存在。

我附上了下面的一段代码和发生错误的部分。

iColumn = WorksheetFunction.Match(sColumn, shDatabase.Range("A1:O1"), 0)

我被这个错误卡住了,无法找到解决方案。

Application.ScreenUpdating = False

Dim shDatabase As Worksheet 'Database Sheet
Dim shSearchData As Worksheet 'SearchData Sheet

Dim iColumn As Integer 'To hold the selected column database sheet
Dim iDatabaseRow As Long 'To store last non-blank row number available in database sheet
Dim iSearchRow As Long 'To hold the last non-row number available in SearchData Sheet

Dim sColumn As String 'To store the column selection
Dim sValue As String 'To hold the search text value


Set shDatabase = ThisWorkbook.Sheets("Database")
Set shSearchData = ThisWorkbook.Sheets("SearchData")

iDatabaseRow = ThisWorkbook.Sheets("Database").Range("A" & Application.Rows.Count).End(xlUp).Row

sColumn = frmForm.cmbSearchColumn.Value

sValue = frmForm.txtSearch.Value

' Where the error happens
If Not IsError( iColumn = WorksheetFunction.Match(sColumn, 
shDatabase.Range("A1:O1"), 0) ) Then
 ThisWorkbook.Sheets("Database").AutoFilterMode = False
Else:
 ThisWorkbook.Sheets("SearchData").AutoFilterMode = False
End If

ThisWorkbook.Sheets("SearchData").Cells.Clear

'Remove filter from databse worksheet
If shDatabase.FilterMode = True Then
    shDatabase.AutoFilterMode = False
End If

'Apply filter on Database worksheet
If frmForm.cmbSearchColumn.Value = "JPE PE" Then
    shDatabase.Range("A1:O" & iDatabaseRow).AutoFilter Field:=iColumn, Criteria1:=sValue

Else
    shDatabase.Range("A1:O" & iDatabaseRow).AutoFilter Field:=iColumn, Criteria1:="*" & sValue & "*"
End If

If Application.WorksheetFunction.Subtotal(3, shDatabase.Range("C:C")) >= 2 Then
    'Code to remove the previous data from SearchData Worksheet
    shSearchData.Cells.Clear
    shDatabase.AutoFilter.Range.Copy shSearchData.Range("A1")
    Application.CutCopyMode = False
    iSearchRow = shSearchData.Range("A" & Application.Rows.Count).End(xlUp).Row
    frmForm.lstDatabase2.ColumnCount = 15
    frmForm.lstDatabase2.ColumnWidths = "20,40,55,55,55,55,55,55,55,55,55,45,45,50,85"

    If iSearchRow > 1 Then

        frmForm.lstDatabase2.RowSource = "SearchData!A2:O" & iSearchRow

        MsgBox "Record found."

    End If

Else

    MsgBox "No record Found."

End If

shDatabase.AutoFilterMode = False
Application.ScreenUpdating = True

End Sub
excel vba runtime-error worksheet-function
1个回答
0
投票

下面是典型方法的概要。

'...
Dim m
'...
m = Application.Match(sColumn, shDatabase.Range("A1:O1"), 0)
If Not IsError(m) Then 
    'got a match - use m here
else
    'no match found
End If
© www.soinside.com 2019 - 2024. All rights reserved.