У меня есть микро, в котором я использую простую формулу 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 &"))")
В результате было получено сообщение о несоответствии типов ошибок и выделена строка оценки.
Есть ли решение для этого? Заранее спасибо.