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哪位高手指点一下?
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哪位高手指点一下?
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
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
转换成字符串 a 有 5 个字符 "1+2+" & vbNullChar
这样在 rs 函数中 z = ptr 会导致死循环。而你将 a 赋值给 Text2 后,在取文本会自动去除末尾的 vbNullChar,"1+2+" 调用 rs 就能正常结束。要保证数据、程序的严密性。