VB自定义加解密函数运行提示argument not optional错误如何解决?
问题原因及修复方案
报错argument not optional的解决
你定义的CleanEncryptSTR函数包含3个必传参数:待处理字符串、密码、加解密标识布尔值,调用时缺传任意一个都会触发该错误。
正确调用示例:
- 加密操作:
CleanEncryptSTR("待加密内容", "自定义密码", True) - 解密操作:
CleanEncryptSTR("待解密内容", "和加密一致的密码", False)
满足「字符类型不变」需求的代码修正
原代码问题:AllowedChars集合包含&、;两个符号,且将数字、大小写字母放在同一集合做偏移运算,会导致数字加密后变为字母、字母加密后变为符号,不符合你的需求。
以下是修正后的完整代码,将三类合法字符拆分处理,保证加密后数字仍为数字、大写字母仍为大写字母、小写字母仍为小写字母,不在三类范围内的字符原样保留:
Public Function CleanEncryptSTR(MyString As String, MyPassword As String, Encrypt As Boolean) As String ' Encrypt True: 加密 False: 解密 Dim i As Integer Dim ASCToAdd As Integer Dim ThisChar As String Dim ThisASC As Integer Dim NewASC As Integer Dim MyStringEncrypted As String ' 拆分三类字符池,独立处理 Dim NumChars As String, UpperChars As String, LowerChars As String Dim PoolLength As Integer, CurrentPool As String NumChars = "0123456789" UpperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" LowerChars = "abcdefghijklmnopqrstuvwxyz" If Len(MyPassword) > 0 Then For i = 1 To Len(MyString) ThisChar = Mid(MyString, i, 1) ' 判断当前字符所属的字符池 ThisASC = InStr(NumChars, ThisChar) If ThisASC > 0 Then PoolLength = Len(NumChars) CurrentPool = NumChars Else ThisASC = InStr(UpperChars, ThisChar) If ThisASC > 0 Then PoolLength = Len(UpperChars) CurrentPool = UpperChars Else ThisASC = InStr(LowerChars, ThisChar) If ThisASC > 0 Then PoolLength = Len(LowerChars) CurrentPool = LowerChars Else ' 不在合法字符池内,原样保留 MyStringEncrypted = MyStringEncrypted & ThisChar GoTo NextLoop End If End If End If ' 偏移计算逻辑和原设计保持一致 ASCToAdd = Asc(Mid(MyPassword, i Mod Len(MyPassword) + 1, 1)) If Encrypt Then NewASC = ThisASC + ASCToAdd Else NewASC = ThisASC - ASCToAdd End If NewASC = NewASC Mod PoolLength If NewASC <= 0 Then NewASC = NewASC + PoolLength End If MyStringEncrypted = MyStringEncrypted & Mid(CurrentPool, NewASC, 1) NextLoop: Next i Else MyStringEncrypted = MyString End If CleanEncryptSTR = MyStringEncrypted End Function
修正说明:
- 拆分三类独立字符池,每个字符仅在所属池内做偏移运算,不会跨类型跳转
- 保留原有的密码流偏移逻辑,加解密规则和原设计完全兼容
- 过滤了原代码中的符号字符,不会出现加密后输出符号的问题
内容的提问来源于stack exchange,提问作者TestingGroundz
相关产品推荐
相关产品推荐

