Dim s() As Byte
dim a as string
a = StrConv(s, vbUnicode)
Text1 = rs(a, "123", "456") 程序出错挂掉
而将以上程序改为:
Dim s() As Byte
dim a as string
a = StrConv(s, vbUnicode)
Text2=a
Text1 = rs(Text2, "123", "456") 程序正常其中rs函数的格式为:
Public Function rs(tp As String, bf As long, du As long) As String哪位高手指点一下?

解决方案 »

  1.   

    我把其中函数贴出来:
    Public Function rs(tp As String, bf As long, du As long) As String 
       On Error Resume Next
       
        Dim tok As Double
        Dim z As Long
        Dim decSt As String, ptr As String
        
        decSt = ""  For z = 1 To Len(tp)
        ptr = InStr(z, tp, "+")
        tok = Val(Mid(tp, z, ptr))
        decSt = decSt + Chr(Mult(tok, bf, du))
        z = ptr
      Next z  rs = decStEnd FunctionPublic Function Mult(ByVal x As long, ByVal p As long, ByVal M As long) As longDim y As Double
    On Error GoTo error1
        
    y = 1
        
        Do While p > 0        Do While (p / 2) = Int((p / 2))
                x = nMod((x * x), M)
                p = p / 2
            Loop
            y = nMod((x * y), M)
            p = p - 1
        Loop
        Mult = y
        Exit Functionerror1:
    y = 0End FunctionPrivate Function nMod(x As long, y As long) As longOn Error Resume NextDim z#z = x - (Int(x / y) * y)nMod = zEnd Function
      

  2.   

    Test2没有定义,应该是定义变量的问题。。
      

  3.   

      For z = 1 To Len(tp) 
        ptr = InStr(z, tp, "+") 
        tok = Val(Mid(tp, z, ptr)) 
        decSt = decSt + Chr(Mult(tok, bf, du)) 
        z = ptr 
      Next z
    红色部分使z不变,出现了死循环
    另外,ptr不要定义为string型,dim ptr as long
      

  4.   

    你的 s() 数组不是以字符 "+" 结尾,比如 31-2B-32-2B-00
    转换成字符串 a 有 5 个字符 "1+2+" & vbNullChar
    这样在 rs 函数中 z = ptr 会导致死循环。而你将 a 赋值给 Text2 后,在取文本会自动去除末尾的 vbNullChar,"1+2+" 调用 rs 就能正常结束。要保证数据、程序的严密性。
      

  5.   

    原因已找到,问题已经解决,多谢Tiger_Zhao及其他支持的朋友。