100分求不算复杂代码
内容:自动寻找下一个编号编号规则:
由4位数字或字母组成,每一位都有0-9 加 A-Z 组成, 每一位按顺序递增
第一个为:A000
接下来是:A001
''''' A009
A00A
A00B
'''''' A00Z
A010
........ A09Z
A0A0最后一个是:ZZZZ
现已知一个编号,求下一个编号
内容:自动寻找下一个编号编号规则:
由4位数字或字母组成,每一位都有0-9 加 A-Z 组成, 每一位按顺序递增
第一个为:A000
接下来是:A001
''''' A009
A00A
A00B
'''''' A00Z
A010
........ A09Z
A0A0最后一个是:ZZZZ
现已知一个编号,求下一个编号
Dim I As Long, J As Long
Dim tmpStr1 As String, tmpStr2 As String
Dim tmpOutStr As String
Dim BitAdd As Boolean
tmpStr1 = UCase(theID)
BitAdd = True
For I = 4 To 1 Step -1
tmpStr2 = Mid(tmpStr1, I, 1) '取一位
If BitAdd = True Then
BitAdd = False
If IsNumeric(tmpStr2) = True Then '是数字
If CLng(tmpStr2) = 9 Then
tmpStr2 = "A"
BitAdd = True '标记进位
Else
tmpStr2 = CStr(CLng(tmpStr2) + 1)
End If
Else '是字母
J = Asc(tmpStr2)
Select Case J
Case 65 To 89 'A - Y
J = J + 1
Case Else
J = 48 'Z进位得0
BitAdd = True '标记进位
End Select
tmpStr2 = Chr(J)
End If
End If
tmpOutStr = tmpStr2 & tmpOutStr
Next I
If tmpOutStr = "0000" Then '溢出处理
GetNextID = "ZZZZ"
Else
GetNextID = tmpOutStr
End If
End Function调用:debug.print GetNextID("A2ed")输出:A2EE注: 对ZZZZ的情况,我采用直接输出ZZZZ的办法.如果你要输出0000,自己改改.
tmpStr2 = "A"
BitAdd = True '标记进位
Else
tmpStr2 = CStr(CLng(tmpStr2) + 1)
End If这里的那个"BitAdd = True '标记进位"一行应该去掉....在数字那边不可能会进位的.....