我的一个跟踪审批的软件应用程序将所有数据放入一个字段中,并且我试图跟踪个人是否迟到批准它,他们的名字是什么。问题是没有一致的批准数量,因此可能有一个,可能有20个。下面是系统返回的示例。
批准历史状态:已批准06/11/12 04:01 AM提交John Doe批准06/13/12 04:20 AM Steve Smith批准由于某些原因与某些名称相关联 - XYZ1 - 节目' 06/13/12 04:20 AM史蒂夫史密斯批准由于某些原因与“Word:LS其他' 06/13/12 04:20 AM史蒂夫史密斯批准由于某些原因与另一个名称相关:产品 - LMN1' 06/13/12 04:20 AM史蒂夫史密斯批准由于某些原因与随机不同名称相关:Word - QRS1' 06/13/12 04:26 AM由Mary Sue批准由于某些原因与其他事情相关:程序 - DEF14' 06/13/12 04:26 AM John Doe批准注意:自动批准:批准者与提交者是同一用户
我正在寻找一个能够查看所有日期并将它们与单元格A1中的日期进行比较的宏,并检查是否有大于单元格A1的日期。
例如,如果A1中的日期是" 6/10/12"它应该返回价值" John Doe"。如果没有任何日期大于单元格A1,则返回空白。有时前4个日期都将小于A1,但其余日期将更大。我希望第一个日期大于A1。
这可能吗?
答案 0 :(得分:0)
由于您对从字符串中提取的数据要做什么感到有点模糊,以下是我对该问题的看法。将原始字符串粘贴到" B1"并且后期批准者将保存到数组中。将出现一个消息框,告诉您第一个迟到的批准者是谁。
Sub GetDatesFromString()
Dim SubStrings() As String
Dim NameSplit() As String
Dim TimeSplit() As Date
Dim Approvers() As String
Dim index, UpperBound, ApproversIndex As Integer
SubStrings() = Split(Cells(1, 2), "M ")
UpperBound = UBound(SubStrings())
ReDim NameSplit(UpperBound)
ReDim TimeSplit(UpperBound)
ApproversIndex = 0
For index = 0 To UBound(SubStrings())
If (Right(SubStrings(index), 1) = "A" Or Right(SubStrings(index), 1) = "P") Then
SubStrings(index) = SubStrings(index) & "M"
End If
NameSplit() = Split(SubStrings(index), " ", 5)
If (Right(SubStrings(index), 2) = "AM" Or Right(SubStrings(index), 2) = "PM") Then
TimeSplit(index) = Right(SubStrings(index), 17)
If ((TimeSplit(index) > 0) And (Left(SubStrings(index), 8) = "Approved")) Then
If TimeSplit(index) > Cells(1, 1) Then
ApproversIndex = ApproversIndex + 1
ReDim Preserve Approvers(ApproversIndex)
Approvers(ApproversIndex) = NameSplit(2) & " " & NameSplit(3) & " on " & TimeSplit(index)
End If
End If
End If
Next index
If ApproversIndex > 0 Then
MsgBox ("The first late approver was " & Approvers(1))
Else
MsgBox ("There were no late approvers")
End If
End Sub
如果数据格式不一致,则输出可能与预期不符。