本帖最后由 microyip 于 2017-11-11 09:48 编辑
三、“信任对VBA工程对象模型的访问”设置 平时编写动态控件时时常发现明明写得内容没错,但又不能执行到结果,而网上资料显示都是这么写,为何?主要是因为Office默认不允许对VBA工程对象进行直接处理访问,也就是“信任对VBA工程对象模型的访问”没开启。而控制这个是否开启,也是通过注册表进行控制的。 HKEY_CURRENT_USER\Software\Microsoft\Office\版本号\Excel\Security\AccessVBOM “AccessVBOM”项的值为1代表开启,0表示关闭“信任对VBA工程对象模型的访问” 检查“信任对VBA工程对象模型的访问”开启状态的参考代码如下:(返回状态的逻辑值) 参考资料:http://club.excelhome.net/thread-883006-1-1.html,用VBA代码开启“信任对VBA工程对象模型的访问”的方法 - '--------------------------------------------------------------------------
- '*****检查“信任对VBA工程对象模型的访问”状态***开始
- Private Function Check_AccessVBOM() As Boolean
- '检查"信任对VBA工程对象模型的访问"是否已开启
- Dim vRegVal As Variant
-
- On Error Resume Next
- vRegVal = CreateObject("WScript.Shell").RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM")
- If vRegVal = "1" Then
- Check_AccessVBOM = True
- Else
- If vRegVal = "" Then Debug.Print '键位不存在
- Check_AccessVBOM = False
- End If
- End Function
- '*****检查“信任对VBA工程对象模型的访问”状态***结束
- '--------------------------------------------------------------------------
复制代码
既然怎么读注册表,就直接写注册表来处理开启模式咯!参考代码如下: - '--------------------------------------------------------------------------
- '*****设置"信任对VBA工程对象模型的访问"***开始
- Private Sub Open_AccessVBOM(ByVal nStatus As Integer)
- '开启"信任对VBA工程对象模型的访问"
- If nStatus < 0 Or nStatus > 1 Then nStatus = 1
- CreateObject("WScript.Shell").RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM", nStatus, "REG_DWORD"
- '"AccessVBOM"项的值为1代表开启,0表示关闭"信任对VBA工程对象模型的访问"
- End Sub
- '*****设置"信任对VBA工程对象模型的访问"***结束
- '--------------------------------------------------------------------------
复制代码
四、工程修复为默认 有了上面的基础,恢复到系统默认安装状态,应该不是什么难事了,注意一点的是,Excel2007以上版本虽然不是凭Level来判断等级,但也存在该键位,默认值为1;假如存在HKEY_LOCAL_MACHINE对应的键位,那么就会变灰,假如想不允许客户改动,可以考虑建立这个键位。参考代码如下: - '--------------------------------------------------------------------------
- '****工程修复***开始
- Sub VBProject_Repair()
- On Error Resume Next
- With CreateObject("WSCRIPT.SHELL")
- .REGDELETE "HKEY_LOCAL_MACHINE\Software\Microsoft\Office" & Application.Version & "\Excel\Security" '直接把注册表里HKEY_LOCAL_MACHINE的安全键位全部删除了,这个是令变灰的罪魁祸首
- .RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\AccessVBOM", 0, "REG_DWORD"
- If Val(Application.Version) < 12 Then
- .RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\Level", 3, "REG_DWORD"
- Else
- .RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\Level", 1, "REG_DWORD"
- .RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office" & Application.Version & "\Excel\Security\VBAWarnings", 3, "REG_DWORD"
- End If
- End With
- End Sub
- '****工程修复***结束
- '--------------------------------------------------------------------------
复制代码
|