Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5377|回复: 4

[已解决]为什么判断并加载引用.dll文件时出错。

[复制链接]
发表于 2013-7-18 22:27 | 显示全部楼层 |阅读模式

Public Sub CheckRegDll() '检查并加载引用DLL文件
    Shell "Regsvr32 /s " & Chr(34) & ThisWorkbook.Path & "\TestDLL.dll" & Chr(34) '加载引用的Dll.
    Dim BolFindAdo该引用项是否未损坏 As Boolean, Refed引用项
    On Err GoTo TZ跳转查找引用项失败
    For Each Refed引用项 In ThisWorkbook.VBProject.References
        If Refed引用项.Name = "TestDLL" Then '检查DLL有没有引用
            If Refed引用项.isbroken Then
                ThisWorkbook.VBProject.References.Remove Refed引用项    '如引用已损坏,删除
            Else
                BolFindAdo该引用项是否未损坏 = True
                Exit For
            End If
        End If
    Next
    If BolFindAdo该引用项是否未损坏 = False Then
        '还没安装,现在安装
        ThisWorkbook.VBProject.References.AddFromFile (ThisWorkbook.Path & "\TestDLL.dll")
    End If
    Exit Sub
TZ跳转查找引用项失败:
    MsgBox (Err.Description & "加载失败,请联系管理员!")
    Exit Sub
End Sub

代码 在公司电脑上可以运行。回家不行了。为什么?怎么解决?我是想把这东西给很多人用的。得找个通用解决办法。谢谢

QQ截图20130718222926.png
QQ截图20130718222652.png
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-7-18 22:33 | 显示全部楼层
回复

使用道具 举报

发表于 2013-7-18 22:34 | 显示全部楼层    本楼为最佳答案   
回复

使用道具 举报

发表于 2013-7-18 22:42 | 显示全部楼层
  1. Sub TrustVBA()
  2.     Dim strKey1 As String, strKey2 As String, strKey3 As String, strKey4 As String
  3.     Dim KeyValue1 As String, KeyValue2 As String
  4.     Dim KeyValue As Long
  5.     Dim strVersion As String
  6.     On Error Resume Next

  7.     strVersion = Application.Version

  8.     strKey1 = "HKEY_CURRENT_USER\Software\Microsoft\Office" & strVersion & "\Excel\Security\AccessVBOM"
  9.     strKey2 = "HKEY_CURRENT_USER\Software\Microsoft\Office" & strVersion & "\Excel\Security\Level"
  10.     strKey3 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office" & strVersion & "\Excel\Security\AccessVBOM"
  11.     strKey4 = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office" & strVersion & "\Excel\Security\Level"
  12.     'AccessVBOM 允许访问VBA对象

  13.     Call WriteReg(strKey1, 1, "REG_DWORD")
  14.     Call WriteReg(strKey2, 1, "REG_DWORD")
  15.     Call WriteReg(strKey3, 1, "REG_DWORD")
  16.     Call WriteReg(strKey4, 1, "REG_DWORD")

  17. End Sub

  18. Sub WriteReg(strkey As String, Value As Variant, ValueType As String)
  19.     Dim objWshell As Object
  20.     Set objWshell = CreateObject("WScript.Shell")
  21.     On Error Resume Next
  22.     If ValueType = "" Then
  23.         objWshell.REGWRITE strkey, Value
  24.     Else
  25.         objWshell.REGWRITE strkey, Value, ValueType
  26.     End If
  27.     Set objWshell = Nothing
  28. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-7-18 22:49 | 显示全部楼层
hwc2ycy 发表于 2013-7-18 22:42

大师,还不睡呀?呵呵 谢谢。
你写的这段代码是什么意思?不懂。求解释。求注释。谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-29 16:28 , Processed in 0.403723 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表