none
VBA引用垃圾控件导致EXCEL无法运行宏 RRS feed

  • 问题

  • “”hwc2ycy 的代码绕过VBA信任 直接让他灰掉了,后期只有代码才能打开(可以的话还原设置我手动还能操作)
    但是本人愚钝,问题还是没有解决,特上附件 求解undefined
    主要就是求一代码把这个勾去掉开启的时候自动去勾,谢谢一直关注我们的论坛精英,的支持和解答,在此谢谢各位
    Sub removeref()

        Dim ref

        Dim refs As Object

        On Error Resume Next        '忽略错误

        Set refs = ThisWorkbook.VBProject.References    '当前工作簿工程引用中引用集合

        If Err.Number <> 0 Then                         '检测是否打开VBA信任

            'MsgBox "VBA信任选项未打开,请打开后再运行", vbInformation + vbOKOnly

            Call TrustVBA(1)                               '开启VBA信任

            Set refs = ThisWorkbook.VBProject.References '

        End If

        For Each ref In refs                            '遍历集合中的引用

            Debug.Print ref.Description                 '输出引用描述,引用窗口中看到的即为描述

            If ref.isbroken Then                        '检测引用的有效性

                refs.Remove ref                         '无效则删除

            End If

        Next

        Call TrustVBA(0)                                '关闭VBA信任

    End Sub

    Function TrustVBA(Optional ByVal KeyValue = 1)

        Dim Key1 As String, Key2 As String, Key3 As String, Key4 As String

        Dim KeyValue1, KeyValue2

        Dim Version As String

        On Error Resume Next

        Version = Application.Version

        Key1 = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Version & "\Excel\Security\AccessVBOM"

        Key2 = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Version & "\Excel\Security\Level"

    Key3 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Version & "\Excel\Security\AccessVBOM"

        Key4 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & Version & "\Excel\Security\Level"

        'AccessVBOM 允许访问VBA对象

        Call WriteReg(Key1, KeyValue, "REG_DWORD")

        Call WriteReg(Key2, KeyValue, "REG_DWORD")

        Call WriteReg(Key3, KeyValue, "REG_DWORD")

        Call WriteReg(Key4, KeyValue, "REG_DWORD")

    End Function

    Sub WriteReg(strkey As String, Value As Variant, ValueType As String)

        Dim Wshell As Object

        Set Wshell = CreateObject("WScript.Shell")

        If ValueType = "" Then

            Wshell.RegWrite strkey, Value

        Else

            Wshell.RegWrite strkey, Value, ValueType

        End If

        Set Wshell = Nothing

    End Sub

    代码确实删除不了,因为丢失了,引用的name均无法获取。
    坐等高手解决。

    • 已移动 ThankfulHeart 2013年1月25日 2:36 Office System VBA
    2013年1月24日 14:35