У меня есть скрипт, который реализует FindNext
, чтобы найти в листе строку, соответствующую двум значениям столбца, которые пользователь вводит с помощью Application.InputBox
.Работает без нареканий.Но есть случай, когда мне бы хотелось, чтобы одно из msgbox отображало другое значение ячейки в этой строке без ввода пользователя.
Пример: вводимые пользователем код задания 000001
найден в столбце A, МВЗ 100100010001
Найден в столбце C.
Поле msgbox будет соответствовать ему и сказать: MsgBox "Job Code (" & lJobCode & ") is eligible for this cost-center.
Что если бы я также хотел, чтобы это окно сообщения добавляло значение, найденное в другом столбце, но автоматически?Мол, без ввода пользователя, потому что они не знали бы эту информацию от руки.
Новый пример MsgBox: MsgBox "Job Code (" & lJobCode & ") is eligible for this (" & Column H Value for this row & ") cost-center.
Я думал о чем-то вроде переменной str
и ссылаюсь на столбец, но у меня возникают проблемы с использованием VBA-триггера для этого значения после сопоставления строки,
Остальная часть сценария:
Option Explicit
Sub findJC_CC()
Dim wsData As Worksheet
Dim rFound As Range
Dim lJobCode As String
Dim lCC As String
Dim sFirst As String
Dim matched As Boolean
lJobCode = Application.InputBox("Please provide a job code", "Job Code", Type:=2)
If lJobCode = "False" Then Exit Sub 'Pressed cancel
lCC = Application.InputBox("Please enter in a cost-center", "CC", Type:=2)
If lCC = "False" Then Exit Sub 'Pressed cancel
matched = False
Set wsData = ThisWorkbook.Worksheets("Sheet2")
Set rFound = wsData.Columns("A").Find(lJobCode, wsData.Cells(wsData.Rows.Count, "A"), xlValues, xlWhole)
If Not rFound Is Nothing Then
sFirst = rFound.Address
Do
If rFound.Offset(, 2).Value = lCC Then
matched = True
'if criteria is met, display msgbox and exit
If rFound.Offset(, 4).Value = "Exempt" Then
MsgBox "The business identified this exempt job as being eligible for schedule pay allowance ."
Exit Sub
End If
'if criteria is met, display msgbox and exit
If rFound.Offset(, 5).Value = "Eligible - Employee Level" Then
MsgBox "This job is only eligible at the employee level. If you have further questions, please reach out to your HRBP."
Exit Sub
End If
'if non-exempt role, and matched, display msgbox and exit
MsgBox "Job Code (" & lJobCode & ") is eligible for this cost-center."
Exit Sub
End If
'loop after first address found until column C has lCC value matched
Set rFound = wsData.Columns("A").FindNext(rFound)
Loop While rFound.Address <> sFirst
'lJobCode value matched, lCC value not matched
If Not matched Then MsgBox "Job Code (" & lJobCode & ") found, but not eligible for this cost-center."
Else
'lJobCode not matched
MsgBox "Job Code (" & lJobCode & ") not eligible."
End If
End Sub