由乱码引起的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程序的语言选择的是中文,改为日本语就可以了。