由乱码引起的VBA错误
1、有位日本同事,拿了一个Excel 2003给我,说是点击就出现下面的错误。我也拿到自己的电脑上试,我用的是Excel 2010,还是一样的错误。
2、打开Excel帮助,尝试解决方法,①用
64位的office打开也不行.②把Excel转换成高版本也不行.
3、用Alt+F11打开VBA,但又不知道密码,但根据帮助文件显示,可能是VBA代码有错误。决定先破解VBA密码。
4、新建一个Excel工作簿,Alt+F11 打开VBA编辑器,新建一个模块 ,复制以下代码。
'移除VBA编码保护
Sub MoveProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, False
End If
End Sub
'设置VBA编码保护
Sub SetProtect()
Dim FileName As String
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
If FileName = CStr(False) Then
Exit Sub
Else
VBAPassword FileName, True
End If
End Sub
Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)
If Dir(FileName) = "" Then
Exit Function
Else
FileCopy FileName, FileName & ".bak"
End If
Dim GetData As String * 5
Open FileName For Binary As #1
Dim CMGs As Long
Dim DPBo As Long
For i = 1 To LOF(1)
Get #1, i, GetData
If GetData = "CMG=""" Then CMGs = i
If GetData = "[Host" Then DPBo = i - 2: Exit For
Next
If CMGs = 0 Then
MsgBox "请先对VBA编码设置一个保护密码...", 32, "提示"
Exit Function
End If
If Protect = False Then
4、得到生成的文件,再打开生成的excel, 是没有VBA密码的。VBA代码显示是由于出现乱码引起的出错。
5、解决方法是安装个Microsoft AppLocale,用这个软件来打开日语编写的VBA Excel文件就不会出错。但日本同事用的是日语操作系统,为什么也会这样呢?后来查了一下,是由于他电脑的非Unicode程序的语言选择的是中文,改为日本语就可以了。