Office受信任的位置

我很好奇如何最好地处理这种情况。 我有一个旧的VBA工作簿,工作得很好。 不幸的是,对于Office 2007/2010中的新安全措施,您将收到“安全警告一些活动内容已被禁用”消息。 我知道我可以点击邮件并select启用内容或将其添加到受信任的位置。 不幸的是,每一次这样做对最终用户来说都是一种痛苦。 所以我在Visual Studio中创build了一个安装项目,它将启动一个控制台应用程序,将该文件复制到模板文件夹,然后在桌面上放置一个快捷方式。 保持它是一个麻烦,虽然因为我不添加更新到Excel文件,工程师。 所以我必须重新创build一个32位的setup.exe。

什么是最好的解决scheme?

它需要使用Windows Vista / 7 32/64位和Office 2007/2010 32位,用户将有不同的计算机技能。

将此链接发送给所有用户。 这是一个非常好的演练如何确保您的文件打开macros启用。 它也给你一些不同的方式来做这取决于你的情况。

http://office.microsoft.com/en-us/excel-help/enable-or-disable-macros-in-office-files-HA010354316.aspx

我有类似的情况,并采取了一些registry项照顾。

HKCU\Software\Microsoft\Office\12.0\Excel\Security\Trusted Locations\AllowNetworkLocations=1 [DWORD] HKCU\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM=1 [DWORD] KHCU\Software\Microsoft\Office\12.0\Excel\Security\VBAWarnings=1 [DWORD] KHLM\Software\Microsoft\Office\Common\Security\UFIControls=1 [DWORD] 

也许快速谷歌searchVBA安全registry项可以帮助你。

这里的游戏迟到,但这是一个常见的烦恼:你需要定义一个'可信任的位置'。

大多数开发人员遇到他们的代码尝试打开电子表格文件时遇到的问题,并且他们得到这个无用的错误消息:

“Office已经检测到这个文件有问题,为了保护你的电脑,这个文件不能被打开。

如果您是VBA编程人员(或使用任何常用脚本语言)的中级专家,请查看Daniel Pineault 2010年在DevHut.net上发布的Trusted Location代码:

DevHut代码示例:使用VBScript的可信位置

为了您的方便,这里是我在Excel中的实现:


Public Sub TrustThisFolder(可选FolderPath作为string,_ 可选TrustSubfolders作为布尔=真,_ 可选TrustNetworkFolders作为布尔=假,_ 可选sDescriptionstring)

'将文件夹添加到“受信任位置”列表中,以便项目的VBA可以
“打开Excel文件而不会引起错误,如”Office已经检测到一个问题
'这个文件。 为了帮助保护你的电脑,这个文件不能被打开。“

“如果你怀疑的话,这个函数已经被执行失败了
“用户没有权限分配”可信位置“状态
'位置,将其重新表述为一个返回True或False的函数

“Nigel Heffernan 2015年1月

“根据Daniel Pineault在2010年6月23日在DevHut.net发布的代码:
'www.devhut.net \ 2010 \ 06 \ 23 \ vbscript-createset-trusted-location-using-vbscript \

'**** **** **** ****此代码在公共领域**** **** **** ****

'单位testing:

'1:恢复注释掉的行'Debug.Print sSubKey&vbTab&sPath
'2:打开立即窗口并运行这个命令:
'TrustThisFolder“Z:\”,True,True,“用户的主目录”
'3:如果列表中已经有“Z:\”,请select另一个文件夹
'4:重复步骤2或3:文件夹应该列在debugging输出中
'5:如果没有列出,请禁用error handling程序并logging任何错误

在错误转到ErrSub

Dim sKeyPath As String

Dim oRegistry As Object
Dim sSubKey As String
Dim oSubKeys的types没有指定。 填充后,它可以迭代
Dim oSubKey'types未指定。

昏暗的bSubFolders作为布尔值
昏暗的bNetworkLocation作为布尔值

昏暗iTrustNetwork只要

Dim sPath As String
Dim sDate As String
Dim sDesc As String
昏暗我只要

Const HKEY_CURRENT_USER =&H80000001

bSubFolders = True
bNetworkLocation = False

如果FolderPath =“”那么
FolderPath = FSO.GetSpecialFolder(2).Path
如果sDescription =“”那么
sDescription =“用户的本地临时文件夹”
万一
万一

如果正确(FolderPath,1)<>“\”然后
FolderPath = FolderPath&“\”
万一

sKeyPath =“”
sKeyPath = sKeyPath&“SOFTWARE \ Microsoft \ Office \”
sKeyPath = sKeyPath&Application.Version
sKeyPath = sKeyPath&“\ Excel \ Security \ Trusted Locations \”

设置oRegistry = GetObject(“winmgmts:\。\ root \ default:StdRegProv”)
'注意:对于WMI脚本,不是通常的\ root \ cimv2:StdRegProv不在该文件夹中

oRegistry.EnumKey HKEY_CURRENT_USER,sKeyPath,oSubKeys

对于oSubKeys中的每个oSubKey

sSubKey = CStr(oSubKey)
oRegistry.GetStringValue HKEY_CURRENT_USER,sKeyPath&“\”&sSubKey,“Path”,sPath

'Debug.Print sSubKey&vbTab&sPath

如果sPath = FolderPath那么
退出
万一

Next oSubKey

如果sPath <> FolderPath那么

如果是数字(replace(sSubKey,“位置”,“”))然后
i = CLng(Replace(sSubKey,“Location”,“”))+ 1
其他
我= UBound(oSubKeys)+ 1
万一

sSubKey =“Location”&CStr(i)

如果TrustNetworkFolders那么
iTrustNetwork = 1
oRegistry.GetDWORDValue HKEY_CURRENT_USER,sKeyPath,“AllowNetworkLocations”,iTrustNetwork
如果iTrustNetwork = 0那么
oRegistry.SetDWORDValue HKEY_CURRENT_USER,sKeyPath,“AllowNetworkLocations”,1
万一
万一

oRegistry.CreateKey HKEY_CURRENT_USER,sKeyPath&“\”&sSubKey
oRegistry.SetStringValue HKEY_CURRENT_USER,sKeyPath&“\”&sSubKey,“Path”,FolderPath
oRegistry.SetStringValue HKEY_CURRENT_USER,sKeyPath&“\”&sSubKey,“Description”,sDescription
oRegistry.SetDWORDValue HKEY_CURRENT_USER,sKeyPath&“\”&sSubKey,“AllowSubFolders”,1

万一

ExitSub:

设置oRegistry = Nothing
退出小组

ErrSub:

恢复ExitSub

结束小组

如果您重复使用,请将代码保留在代码中:这将区分您(和StackOverflow)与其他专家(和其他人)在没有确认的情况下交换知识的其他站点和其他站点。