«Объект не поддерживает это свойство или метод ошибки» при использовании Index-Match для проверки данных. - PullRequest
0 голосов
/ 14 января 2019

У меня есть микро, в котором я использую простую формулу INDEX-MATCH, чтобы выбрать переменную string из выпадающего списка. Столбцы INDEX-MATCH находятся в Sheet1, а список проверки данных - в Sheet2. Запуск микро приводит к ошибке Object doesn't support this property or method и выделяет строку cel2.Offset(0, 2).Validate = coresVal.

Sheet2 имеет Private Sub Worksheet_Change(___) как Sub только с выбранными ячейками, вызывающими изменение в Sheet2, если это может вызвать ошибку, я не знаю. Я делаю что-то не так с кодом ниже? Я попытался проверить, относятся ли обе переменные, coresVal и формула INDEX-MATCH к одному типу, и она показывает обе из них как strings. По какой причине я получаю эту ошибку?

Option Explicit
'using a constant to store the highlight color...
Const HIGHLIGHT_COLOR = 9894500 'RGB(100, 250, 150)'Is a cell highlighted? 
EDIT: changed the function name to IsHighlighted

Sub Asign_Bided()

Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim cel1 As Range
Dim cel2 As Range
Dim Bid As Range
Dim line As Range
Dim OffEmp As Range
Dim BidL8 As Range
Dim BidL8E As Range
Dim coresVal As String

'This sheet has the table from which INDEX-MATCH should be pulling the employee name
Set ws1 = Worksheets("Sheet1")

'This is the sheet where the name should be selected from Data Validation drop-down
'and it also has a "Private Sub Worksheet_Change(ByVal  Target AS Range)"
Set ws2 = Worksheets("Sheet2")

'Range("Sheet2!B12:B40,Sheet2!B43:B58,Sheet2!B61:B77,Sheet2!B81:B97,Sheet2!B101:B117)
Set line = ws2.Range("All_Pos_Hilight_Mon") 
Set OffEmp = ws2.Range("$B$151:$B$210")

'Below Ranges are in a Table with two columns Employee and Position in Sheet1;
Set BidL8 = ws1.Range("Bided_Pos_T[Bided_Prep_Position]")
Set BidL8E = ws1.Range("Bided_Pos_T[Employee]")

ws2.Activate
For Each cel2 In line
    If IsHighlighted(cel2) Then
        For Each cel1 In BidL8E
            If Application.WorksheetFunction.CountIf(OffEmp, cel1.Value) > 0 Then
            Else:   coresVal = "=INDEX(Bided_Pos_T[Employee],MATCH(Butter_8_Prep_Mon,Bided_Pos_T[Bided_Prep_Position],0))"
                    Debug.Print coresVal
                    cel2.Offset(0, 2).Validate = coresVal
            End If
        Next cel1
    End If
Next cel2
End Sub
Function IsHighlighted(c As Range)
'Function to check if that particular cell is highlighted
    IsHighlighted = (c.Interior.Color = HIGHLIGHT_COLOR)
End Function

Ожидаемый результат здесь заключается в том, что имя сотрудника из таблицы должно храниться в coresVal, а после cel2 будет offset, оно должно Validate это имя в Sheet2. Я также пытался использовать функцию Evaluate.

Пример: coresVal = Evaluate ("INDEX (" & BidL8E.Address &",MATCH(cel2.Value, " & BidL8.Address &"))")

В результате было получено сообщение о несоответствии типов ошибок и выделена строка оценки. Есть ли решение для этого? Заранее спасибо.

1 Ответ

0 голосов
/ 14 января 2019

Не уверен, что такое cel2.Offset(0, 2).Validate = coresVal, может быть, вы имели в виду cel2.Offset(0, 2).Value = coresVal?

В любом случае, у вас есть некоторая синтаксическая ошибка в вашей Evaluate строке формулы.

Для настройки столбцов в таблице (ListObject) я скорее использую настройку объектов, как в коде ниже:

Dim Tbl As ListObject

Set Tbl = ws1.ListObjects("Bided_Pos_T")

Set BidL8 = Tbl.ListColumns("Bided_Prep_Position").DataBodyRange
Set BidL8E = Tbl.ListColumns("Employee").DataBodyRange

Затем, что касается вашей строки Evaluate, вам нужно использовать что-то в строке ниже:

coresVal = Evaluate("INDEX(" & BidL8E.Address(0, 0, xlA1, xlExternal) & _
                        ",MATCH(" & cel2.Value & "," & BidL8.Address(0, 0, xlA1, xlExternal) & ",0))")

Поскольку ваши 2 диапазона BidL8E и BidL8 не входят в диапазон "Sheet1", а диапазон cel2 проходит через line, который находится в "Sheet1", поэтому вам нужно указать 4-й параметр Range.Address функцию см. LINK

Однако , вам также необходимо установить сценарий обработки ошибок на случай, если раздел MATCH внутри Index завершится неудачей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...