尝试在选定案例中将 3 个语句连接在一起



我正在尝试将这 3 个语句连接在一起。我可以让两个人上班,但不能让第三个上班。

检查正在查看第 5 个字符是否 = a,b,c,d。

Check0正在查看字符 S 2-9 是否都是数字。

Check3正在查看前 3 个字符是否是数字。

预期效果

之前 >之后

检查 0e01730101.pdf>S-173-0101

检查3173d00510.pdf>S-173-D005

检查e173d0061.pdf> S-173-D006

现在 Check0 不起作用。当我运行代码时,它似乎跳过了我的 Case 13 Check0 语句。无论如何,我可以写这个,这样 3 个检查就不会相互冲突?

Option Explicit
Sub Convert()
Application.ScreenUpdating = False
Dim rng As Range, aCell As Range
Dim val As String, Check, Check0, Check3
Dim LastRow As Long
LastRow = Range("A" & Rows.Count).End(xlUp).Row
Set rng = Range("A2:A" & LastRow)
For Each aCell In rng.Cells
Select Case Len(aCell)
'Case 12 left out
Case 13
Check = Mid(aCell, 5, Len(aCell) - 12)
If Check = "a" Or Check = "b" Or Check = "c" Or Check = "d" Then 'Existing Standard
val = "S-" & Left(aCell, Len(aCell) - 13) & Mid(aCell, 2, Len(aCell) - 10) & "-" & Mid(aCell, 5, Len(aCell) - 9)
Check0 = IsNumeric(Mid(aCell, 2, Len(aCell) - 5)) '|||PROBLEM|||
ElseIf Check0 = True Then 'Existing Three Line Diagrams
val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9)
End If
Check3 = IsNumeric(Left(aCell, 3))
If Check3 = True Then 'Standard after page 9
val = "S-" & Mid(aCell, 1, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9)
End If
Check = ""
Check0 = ""
Check3 = ""
'Case 14 left out
Case Else 'All other pages
val = "_Mod " & Left(aCell, Len(aCell) - 4)
End Select
val = UCase(val)
val = val & " " & aCell.Offset(, 2) & aCell.Offset(, 3)
aCell.Offset(, 1).Value = val
Next
Application.ScreenUpdating = True
End Sub

问题是检查时Check0变量未初始化。最好先进行所有三项检查,然后才执行If...ElseIf...

其次,此表达式使用了输入字符串的错误部分:

val = "S-" & Left(aCell, Len(aCell) - 10) & "-" & Mid(aCell, 4, Len(aCell) - 9)

我真的不明白你为什么使用Len(aCell) - something,因为众所周知长度是 13。当然Left(aCell, Len(aCell) - 13)是毫无用处的,因为它将是空字符串。

以下是对其他一些优化的更正(pos是一个Long(:

Case 13
Check = InStr("abcd", Mid(aCell, 5, 1))
Check0 = IsNumeric(Mid(aCell, 2, 8))
Check3 = IsNumeric(Left(aCell, 3))
pos = IIf(Check3, 1, _
IIf(Check, 2, _
IIf(Check0, 3, 0)))
val = IIf(pos, "S-" & Mid(aCell, pos, 3) & "-" & Mid(aCell, pos+3, 4), "??")

最新更新