Office中国论坛/Access中国论坛
标题:
已解决。excel2007宏安全设置在注册表的哪个位置?
[打印本页]
作者:
wu8313
时间:
2008-7-13 17:02
标题:
已解决。excel2007宏安全设置在注册表的哪个位置?
请问一下:excel2007宏安全设置在注册表的哪个位置?
[
本帖最后由 wu8313 于 2008-9-21 17:03 编辑
]
作者:
tmtony
时间:
2008-7-13 21:55
与旧版本有所不同.附见图片
作者:
tmtony
时间:
2008-7-13 21:58
注册表可参考Keanjeason的2003版的设置方式, 位置应该差不多
Option Explicit
Sub SetExcelVBA()
'练习
'功能:改变Excel的安全级别
'使用:Wscript,FileSystemObject,创建txt文件,注册表操作,VBS文件自我删除,改变Excel文件读写属性等
'By
Keanjeason@Officefans.net
Dim WSH As Object, ret As String, regStr As String
Dim strFullname As String, strVBS As String
Dim tf, fso, RetVal
'本程序仅适用于Excel 2003( 11.0),如果当前版本不是2003则退出
If Application.Version <> "11.0" Then MsgBox "本代码仅在 Excel 2003 下可使用! ", vbOKOnly + vbCritical, "Keanjeason": Exit Sub
strFullname = ThisWorkbook.FullName '取得当前工作薄的全名
strVBS = Replace(UCase(strFullname), ".XLS", ".vbs") 'temp文件VBS的文件名
Set WSH = CreateObject("Wscript.Shell") '创建Wscript对象
Err.Clear
On Error Resume Next
regStr = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\Level" '注册表中Excel vba安全级别位置
ret = WSH.RegRead(regStr) '读取当前安全级别
If Err.Number <> 0 Then
'判断读取是否成功
MsgBox "从注册表读取当前Excel VBA安全级别设置失败,本程序将退出! ", vbOKOnly + vbCritical, "Keanjeason"
Exit Sub
Else
'如果当前Excel VBA安全级别不为“低”,则设置为“低”,值1-4分别对应:低,中,高,非常高
If Val(ret) <> 1 Then ret = WSH.RegWrite(regStr, "1", "REG_DWORD")
End If
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile(strVBS, True) '创建temp文件VBS文件
With tf
'写入VBS文件内容
.WriteLine ("Dim oExcel,fso,delme")
.WriteLine ("Set fso = CreateObject(""Scripting.FileSystemObject"")")
.WriteLine ("Set oExcel = CreateObject(""excel.application"")")
.WriteLine ("oExcel.Workbooks.Open " & Chr(34) & strFullname & Chr(34))
.WriteLine ("oExcel.Visible=true")
.WriteLine ("Set oExcel = Nothing")
.WriteLine ("delme = fso.DeleteFile(" & Chr(34) & strVBS & Chr(34) & ")")
.Close
End With
With ThisWorkbook
'将当前文件属性设置为“只读”,以方便重新打开
.ChangeFileAccess Mode:=xlReadOnly
.Saved = True
End With
RetVal = WSH.Run(Chr(34) & strVBS & Chr(34), 1, True) '运行刚刚创建的VBS文件,新启动一个Excel程序
Application.Quit '退出当前Excel
Set WSH = Nothing
Set fso = Nothing
End Sub
作者:
wu8313
时间:
2008-7-15 07:01
我安装的是office2007 professional 。注册表中压根就没有类似access2007中的子键和键值。我后来修改注册表新建了子键和键值,测试可行。
'======================
'禁用office2007的vbawarning
'禁用所有宏,并且不通知 4
'禁用所有宏,并发出通知 2
'禁用无数字签署的所有宏 3
'启用所有宏(不推荐;可能会运行有潜在危险的代码) 1
CreateNewKey HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security"
SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security", "VBAWarnings", "1", REG_DWORD
一并上传代码。
'禁用access2007的沙盒模式
'0 始终禁用沙盒模式
'1 沙盒模式用于 Access,而不用于非 Access 程序。
'2 沙盒模式用于非 Access 程序,而不用于 Access。
'3 始终启用沙盒模式。这是在安装 Access 时的默认值。
If QueryValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines", "SandboxMode") <> 0 Then
CreateNewKey HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines"
SetKeyValue HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines", "SandboxMode", "0", REG_DWORD
'MsgBox "新键值=" & QueryValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines", "SandboxMode")
Else
'MsgBox "系统原来键值=" & QueryValue(HKEY_LOCAL_MACHINE, "Software\Microsoft\Office\12.0\Access Connectivity Engine\Engines", "SandboxMode")
End If
'------------------------------------------------------------------------------------------------------------------------------------------
'禁用office2007的vbawarning
'禁用所有宏,并且不通知 4
'禁用所有宏,并发出通知 2
'禁用无数字签署的所有宏 3
'启用所有宏(不推荐;可能会运行有潜在危险的代码) 1
'针对access2007
If QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\security", "VBAWarnings") <> 1 Then
CreateNewKey HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\security"
SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\security", "VBAWarnings", "1", REG_DWORD
'MsgBox "新键值=" & QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\security", "VBAWarnings")
Else
'MsgBox "系统原来键值=" & QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\Access\security", "VBAWarnings")
End If
'针对excel2007
If QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security", "VBAWarnings") <> 1 Then
CreateNewKey HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security"
SetKeyValue HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security", "VBAWarnings", "1", REG_DWORD
'MsgBox "新键值=" & QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security", "VBAWarnings")
Else
'MsgBox "系统原来键值=" & QueryValue(HKEY_CURRENT_USER, "Software\Microsoft\Office\12.0\excel\security", "VBAWarnings")
End If
'----------------------------------------------------------------------------------------------------------------------------------
我想 企业版等其他版本的office2007 应该也是这样设置的吧?我没有测试。
[
本帖最后由 wu8313 于 2008-7-18 17:29 编辑
]
作者:
tanhong
时间:
2008-9-15 15:44
哈!这里也有关于安全设置的帖子,相互学习借鉴一下.
作者:
tonyjx
时间:
2008-10-11 19:32
谢谢分享
作者:
KerryHuang
时间:
2008-10-11 19:43
哈,我现在的程序中用了江羽版主的代码,在此谢过了![:50]
作者:
sinney
时间:
2008-10-11 21:46
完全不会 excel
作者:
zhengyx
时间:
2008-12-31 15:00
好东西,快看看!
作者:
zhengyx
时间:
2008-12-31 15:03
压缩包有密码,是什么?
作者:
c101
时间:
2009-10-18 21:38
谢谢分享
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3