关于使用了“禁用宏就关闭文档功能”出现问题的解决方案

 

  说明:在新版本的“EXCEL取数助手”中已经提供了该功能,不需要进行手工操作了!

 

    本功能的基本原理:
    是在当前文档添加一个隐藏的宏表,由于其优先级高于宏,
也就是说宏表中的代码会自动执行,excel无法将其关闭。
    而在这个宏表里引用了一句宏代码:
        Function my() 
        End function
      如果打开时不启用宏,则不能执行这段宏代码,
  宏表代码就会转入关闭文档的错误处理语句。

  出现问题的原因:
  如果即使启用宏,也不能打开文档,那是因为误删了“Function my()”代码导致。

  解决方案:
  1、随便打开一个word文档
  2、点菜单 插入 --对象  ,点“由文件创建”,点“浏览”,找到那个问题文档后点确定。
  这样就把这个文档嵌入到word文档中。
  3、然后在双击这个嵌入在word文档中的excel文档,依然会提示“禁用了宏,关闭文档”。
    由于是在DDE环境,excel无法关闭word文档,这样就可以打开这个文档查看内容了。

  补救措施:
上述办法,只能看到文档,不能彻底解决问题。
1、如果想继续保留“禁用宏就关闭文档功能”功能,就需要在模块中添加:
Function MY()
End Function

2、如果想彻底取消“禁用宏就关闭文档功能”这个功能,请将以下代码拷入某一xls文档的模块中
,并引用ADO,,然后执行这段宏就可以了。
(引用ADO的方法:在代码工具的界面中,点菜单工具、引用 "Microsoft ActiveX Date Objects2.8",
有可能不是2.8,其他版本也可以)

Sub ReSet()
    On Error Resume Next
   
  Dim DB As ADODB.Connection
  Dim RS As Recordset
  Set DB = New ADODB.Connection
  Set RS = New Recordset
 
  Application.DisplayAlerts = False
 
  Dim FileName  As String
  FileName ="D:\TEMP\1.xls"    '要替换成那个有问题的文档
   
 
  DB.Open"Provider=Microsoft.Jet.OLEDB.4.0;Persist SecurityInfo=False;  Data Source=" &FileName & ";Extended Properties='Excel8.0;HDR=No'"
  RS.Open "Select * from [Macro1$]", DB,adOpenDynamic, adLockOptimistic
 
 
  Do While Not RS.EOF
        RS.Fields(0) = True
        RS.MoveNext
  Loop
  DB.Close
  Set RS = Nothing: Set DB = Nothing
 
 
  Dim WB As Workbook, I As Integer
  Set WB =Application.Workbooks.Open(FileName)
  WB.Sheets("Macro1").Delete

  For I = 1 To WB.Names.Count
      WB.Names(I).Delete
  Next I

  WB.Close True
 
  MsgBox "文档已恢复完毕!" + Chr(13) +"如果有错误提示,请手工删除Auto_Activate的名称定义即可!(依次点击菜单:插入、名称、定义)",vbInformation, "提示"
     
  Application.DisplayAlerts = True
 
 
End Sub