100分求不算复杂代码
内容:自动寻找下一个编号编号规则:
由4位数字或字母组成,每一位都有0-9 加 A-Z  组成, 每一位按顺序递增
第一个为:A000
接下来是:A001
'''''     A009
          A00A
          A00B
''''''    A00Z
          A010
........  A09Z
          A0A0最后一个是:ZZZZ
现已知一个编号,求下一个编号

解决方案 »

  1.   

    Public Function GetNextID(ByVal theID As String) As String
        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,自己改改.
      

  2.   

    -_-失误失误...............If CLng(tmpStr2) = 9 Then
        tmpStr2 = "A"
        BitAdd = True   '标记进位
    Else
        tmpStr2 = CStr(CLng(tmpStr2) + 1)
    End If这里的那个"BitAdd = True   '标记进位"一行应该去掉....在数字那边不可能会进位的.....