创建 GUID CreateObject("Scriptlet.TypeLib") 拒绝的权限-何保辛
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


创建 GUID CreateObject("Scriptlet.TypeLib") 拒绝的权限

发表时间:2018/7/8 1:18:18 评论(13) 浏览(17945)  评论 | 加入收藏 | 复制
   
摘 要:过去 CreateObject("Scriptlet.TypeLib") 产生 GUID 的方法,因为安全理由,2017年7月的安全更新里,已经被屏蔽,还是要用微软建议的新方法。
正 文:

当您运行 Visual Basic for Applications 调用 CreateObject("Scriptlet.TypeLib") (VBA) 代码。GUID函数来创建 GUID (Word、Excel 等),则 Microsoft Office 应用程序中您会收到以下错误消息:


Run-time error '70':
Permission denied


此问题是由于。在 7 月 2017年安全更新、 CreateObject("Scriptlet.TypeLib")。GUID 被阻止的 Office VBA 中的恶意代码的安全防范。

新的方法是:


Private Type GUID_TYPE
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type
 
Private Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (guid As GUID_TYPE) As LongPtr
Private Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" (guid As GUID_TYPE, ByVal lpStrGuid As LongPtr, ByVal cbMax As Long) As LongPtr
 
Function newGUID()
Dim guid As GUID_TYPE
Dim strGuid As String
Dim retValue As LongPtr
Const guidLength As Long = 39 'registry GUID format with null terminator {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
retValue = CoCreateGuid(guid)
If retValue = 0 Then
    strGuid = String$(guidLength, vbNullChar)
    retValue = StringFromGUID2(guid, StrPtr(strGuid), guidLength)
    If retValue = guidLength Then
        ' valid GUID as a string
        newGUID = strGuid
    End If
End If

End Function



开发者你们好,这是 地球信息思维开发者 dbaseIIIer (QQ325613888) 
更多的 Access/VBA 互联网交互技术,可以参考 本站内部栏目  互联网技术栏目
更多的思维在  新浪微博   Access贴吧  VisualPHP贴吧


Access软件网交流QQ群(群号:198465573)
 
 相关文章
如何在ADP中获取GUID字符串   【朱亦文  2004/11/10】
如何在 mdb 中获取 GUID 字符串   【朱亦文  2004/11/10】
一句VBA 生成GUID  【dbaseIIIer  2012/12/28】
获取全球唯一识别码GUID示例  【杜超-2号  2013/10/3】
常见问答
技术分类
相关资源
文章搜索
关于作者

何保辛

文章分类

文章存档

友情链接