Невозможно получить свойства соответствия класса функции листа - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать форму пользователя с функцией «Поиск», однако функция «поиск» не работает из-за ошибки 1004.

Ошибка Ошибка времени выполнения Ошибка 1004 - Невозможно выполнить получить свойства сопоставления функции листа. Class.

После большого чтения из inte rnet некоторые предлагают изменить worksheetfucntion.match на application.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

1 Ответ

0 голосов
/ 28 апреля 2020

Вот схема типичного подхода:

'...
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...