Option Explicit
Private Function ValidChk(K As Long) As Boolean
If K < 2 Or K > 36 Then
MsgBox "由于编码符号的限制,进制只能设置为2-36"
Else
ValidChk = True
End If
End Function
Private Function DecToAny(ByVal n As Long, K As Long) As String
Dim m As Long
Dim Asc0 As Long, Asc9 As Long, AscA As Long
Dim c As Long
If Not ValidChk(K) Then Exit Function
Asc0 = Asc("0")
AscA = Asc("A")
Asc9 = Asc0 + 9
While n > 0
m = n Mod K
If m > 9 Then
c = AscA + m - 10
Else
c = Asc0 + m
End If
DecToAny = Chr(c) & DecToAny
n = (n - m) / K
Wend
End Function
Private Function AnyToDec(ByVal n As String, ByVal K As Long) As Long
Dim m As Long
Dim Kb As Long
Dim B() As Byte
Dim Asc0 As Long, Asc9 As Long, AscA As Long
Dim i As Long
If Not ValidChk(K) Then Exit Function
Asc9 = Asc("9")
AscA = Asc("A")
Asc0 = Asc("0")
B = StrConv(UCase(n), vbFromUnicode)
Kb = 1
For i = UBound(B) To 0 Step -1
If B(i) > Asc9 Then
m = B(i) - AscA + 10
Else
m = B(i) - Asc0
End If
AnyToDec = AnyToDec + m * Kb
Kb = Kb * K
Next
End Function
Private Sub Text1_Change()
If IsNumeric(Text1) And IsNumeric(Text3) Then
Text2 = DecToAny(Text1, Text3)
End If
End Sub
Private Sub Text4_Change()
If IsNumeric(Text6) Then
Text5 = AnyToDec(Text4, Text6)
End If
End Sub