2024年1月25日发(作者:)

如何解决“对于指定的操作,该主题不受信任”的问题

用VB或是VBA开发的朋友,特别是会用到COM控件的,这种故障应该是碰到过的,那就是弹出对话框提示“对于指定的操作,该主题不受信任”(见下图)。

据我个人所知的,受影响的控件有MSCOMCT2、Mscomm32、MSDataGrid、MSFlexGrid、MSWinsock。也就是说如果你在使用VB、VBA开发的时候,在添加某一控件的时候,出现上述画面中的提示,那么下面的内容可以帮你解决这一问题。

一、原因

为什么会出现上述提示,因为在VB(包含VBA)中的AcitveX控件的漏洞可能允许远程执行代码,请情参看MS08-070。

微软为了封堵这一漏洞便发布补丁KB960715,而这一补丁的作用是将上面提到的这些控件给禁用了,这就是添加此类控件时出现错误提示的原因。

二、临时解决方案

如果在一个脱机(没有网络)的开发环境中,临时的解决方案便是将KB960715补丁卸载(如果删除了补丁卸载信息,可重新安装一次该补丁或从别的机器中复制卸载需要的文件,然后再卸载),然后再添加这些控件。

但此解决方案存在弊端,下次自动更新重新装上KB960715补丁时,故障又会重现。

三、完美解决方案

在KB960715之后,微软发布了新的补丁(VB6 SP6的累积更新KB957924)解决了这一问题。

首先我们看一下微软是如何封堵这一漏洞的吧(Q240797)。

针对VB环境

1.下载并安装VB SP6。

2.下载并安装VB6 SP6的累积更新KB957924(VB6 SP6的累积更新的汇总说明)。

3.将控件重新拖拽一次,然后重新编译发布。

针对VBA环境

1.下载并安装VB SP6。

2.下载并安装VB6 SP6的累积更新KB957924(VB6 SP6的累积更新的汇总说明)。

3.电脑中搜索扩展名为“.exd”的文件(控件的缓存文件,需要在高级选项中选择“搜索隐藏的文件和文件夹”),然后将其删除。

4.将控件重新拖拽。

特别说明:如果机器中没有安装VB,则VB SP6是无法安装的,当然其累积更新也就无法安装。具体的解决办法是可以先在一台装有VB的电脑上安装这些补丁,然后将相应的控件文件复制到开发环境的那台机器的(systemrootwindowssystem32)路径下覆盖旧版文件,并使用Regsvr32进行控件注册即可。

VB的SP6补丁解决更正的控件问题:

》当对 Excel 使用 RichTextBox 控件时,出现“无效页面错误”。

》Q192648:向 Frame 控件中添加无窗口的透明控件将导致 Frame 显示不正确。

》Q193025:Visual Basic 在运行时刻并不动态加载尚未有许可协议的 MFC 控件

》Q195840:如果在行发生更改之前,要滚动至的新行不可见,DataGrid 的 Row

ColChange 事件没有发生。

》Q198880:DTPicker 控件的 MinDate 和 MaxDate 属性可以在运行时刻进行设

置,但是只有上次属性设置有效。

》Q221225:在 Internet Explorer 中装入 MaskedEdit 控件并将 PARAM Name

掩码值设置为大于 64 个字符的值将导致缓冲区溢出错误。

》Q223066:如果在 DataGrid 控件的 SelChange 事件中使用了 MsgBox,在 Vi

sual Basic 中出现“无效页面错误”的错误信息。

》Q223087:在 Internet Explorer 所管理的用户控件中,某些加速键以及文本

编辑控制快捷键(例如:SHIFT+CTRL+END)不起作用。

》Q223099:用户控件的 DataMemberChanged 事件处理不正确。

》Q223062:如果是用编程的方法设置记录的字段值,DataGrid 控件无法添加新

记录。

》Q223065:在 DataGrid 控件的 MouseUp 和 MouseDown 事件中,Button 参数

总为 0。

》Q223072:向包含在 DataReport 中的 TextBox 控件的布尔类型 DataFormat

属性中添加一个非空值会导致应用程序错误。

》Q223078:当与 DataGrid 控件一起使用 MDAC 2.1 时,列的大小会丢失,同时

列会聚集在一起并位于左边。

》Q223117:自定义“工具栏”控件(来自常用控件)使按钮变大。

》Q223108:如果将 MSChart 控件的 AxisScaleType 属性设置为对数,Visual

Basic 将停止响应。

》当在 PowerPoint 中使用 RichTextBox 控件时,RichTextBox 控件的“属性”

页中会发生“无效属性值”错误。

》如果用包含公用用户自定义类型 (UDT) 的用户控件运行一个编译后的 .exe 文

件,则 Visual Basic 6.0 将发生自动化错误。

》单击 DataGrid 控件的水平滚动条的滑块时,将导致隐藏列 0 的显示。

》当展开或折叠窗体上的 TreeView 控件时,将出现错误、程序停止或与节点相

关的一些问题。

》如果试图将 ADO 数据控件的 Recordset 属性设置为层次结构中的某个子记录

集,则会出现错误消息“对象‘Iadodc’的方法程序‘Recordset’失败”。

》在 DataGrid 控件的 BeforeColUpdate 事件中,数据会在事件发生前就先移动

到缓冲区中。这样,s(1).Value 会返回编辑前单元格中的内容

,而不是单元格中编辑后的内容。

》与 OLE-DB 相绑定的具有层次结构的 Flexgrid 控件 (MSHflexGrid) 在 Inte

rnet Explorer 中根本无法使用。

》当单击用户控件的 DataField 组合框时,用户控件的 DataMember 属性为空。

》当 MergeCells 属性值更改为“限制”时,MSFlexGrid 控件会停止运行。

》当更改 ImageList 控件中图像的大小时,系统会停止响应。

》当使用与数据控件相绑定的 DataGrid 控件时,在至少运行了两次某个工程文

件之后,Powerpoint 或 Word 中的垂直和水平滚动条工作不正确。

》对 Locked 属性设置为“True”的 TextBox 使用 SendKeys 将引起额外事件发

生。

》当嵌入到 Office 应用程序中运行时,Visual Basic 6.0 控件无法正确工作。

》当关闭包含 RTF 控件的 ActiveX DLL 窗体时,Visual Basic 将停止响应。

》当编译某个工程文件时,如果工程文件中的某个用户控件包含用户自定义类型

且该控件中还使用了 With 语句,则 Visual Basic 将停止运行。

》当删除 TreeView 控件中的节点时,Visual Basic 将停止运行

下载地址:/soft/

或/v7/Software/Catalog60/