Если я вас правильно понимаю, должно работать следующее. Регулярное выражение вернет последнюю дату в ячейке (и она должна быть в указанном вами формате), где следующая строка начинается с фразы « Технические / другие утверждающие »
Option Explicit
Function LastDate(S As String) As String
Dim RE As Object, MC As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Pattern = "[\s\S]+((?:\d{2}-){2}\d{4}\s(?:\d{2}:){2}\d{2}).*[\n\r]+Technical/other approvers.*"
.ignorecase = True
.MultiLine = True
.Global = False
If RE.test(S) = True Then
Set MC = RE.Execute(S)
LastDate = MC(0).submatches(0)
End If
End With
End Function
РЕДАКТИРОВАТЬ: (согласно предложению Raystafarian) Приведенный выше код использует то, что называется поздним связыванием. Если вы используете это только на своем компьютере, раннее связывание будет предпочтительнее, так как при вводе кода у вас будет преимущество Intellisense. Если это будет распространяться, это может быть не так просто, как вам нужно будет установить ссылки на всех компьютерах получателей.
Производительность должна быть улучшена. Однако, будет ли это заметно, зависит от размера вашей базы данных.
Вот код, переписанный для раннего связывания.
Option Explicit
'Using Early Binding
'Set Reference (Tools/References) to Microsoft VBScript Regular Expressions 5.5
Function LastDate2(S As String) As String
Dim RE As RegExp, MC As MatchCollection
Set RE = New RegExp
With RE
.Pattern = "[\s\S]+((?:\d{2}-){2}\d{4}\s(?:\d{2}:){2}\d{2}).*[\n\r]+Technical/other approvers.*"
.ignorecase = True
.MultiLine = True
.Global = False
If RE.test(S) = True Then
Set MC = RE.Execute(S)
LastDate2 = MC(0).submatches(0)
End If
End With
End Function