MS Access VBA错误:运行时错误 '70' 权限被拒绝。

8 浏览
0 Comments

MS Access VBA错误:运行时错误 '70' 权限被拒绝。

我认为这个问题是最近更新的MS Office/Access或Windows 10导致的。当我运行这段代码时:

Dim s As String
With CreateObject("Scriptlet.TypeLib")
    s = Left(.Guid, 9)
   newguidx = Right(s, 8)
End With

我收到一个错误:With语句权限被拒绝。这个问题只在管理员更新系统后出现。我没有回滚更新的选项。有人遇到过这个问题并找到了解决方法吗?

操作系统:Windows 7企业版

Access版本:2010

谢谢

0
0 Comments

运行时错误'70'权限被拒绝是由于Windows更新移除了"Scriptlet.TypeLib"引起的。解决方法之一是使用以下代码替代:

Declare Function CoCreateGuid Lib "ole32" (ByRef GUID As Byte) As Long

Public Function GenerateGUID() As String

Dim ID(0 To 15) As Byte

Dim N As Long

Dim GUID As String

Dim Res As Long

Res = CoCreateGuid(ID(0))

For N = 0 To 15

GUID = GUID & IIf(ID(N) < 16, "0", "") & Hex$(ID(N))

If Len(GUID) = 8 Or Len(GUID) = 13 Or Len(GUID) = 18 Or Len(GUID) = 23 Then

GUID = GUID & "-"

End If

Next N

GenerateGUID = GUID

End Function

另外,如果你正在连接到SQL Server 2008或更高版本,可以尝试使用SQL的NEWID()函数来替代。

0
0 Comments

在Access中,我们可以使用非常简短的函数来利用Application.StringFromGUID生成GUID。它生成的GUID格式很冗长,例如{guid {00000000-0000-0000-0000-000000000000}}

Declare PtrSafe Sub CoCreateGuid Lib "ole32" (ByVal GUID As LongPtr)
Public Function NewGUID() As String
    Dim b(15) As Byte
    CoCreateGUID VarPtr(b(0))
    NewGUID = Application.StringFromGUID(b)
End Function

你可以通过替换该函数的最后一行NewGUID = Mid(Application.StringFromGUID(b), 8, 36)来去除不需要的字符。这样,格式将会是00000000-0000-0000-0000-000000000000

然而,有时候当我们运行这段代码时,可能会出现一个错误:Run time error '70' Permission Denied。这是由于访问权限不足导致的。

要解决这个问题,我们可以采取以下措施:

1. 确保你具有足够的权限来运行这段代码。如果你是在受限制的环境中运行代码,可能需要联系管理员获取适当的权限。

2. 确保你正在运行的Access数据库文件没有被其他程序占用或只读状态。如果是这样,关闭其他程序或将文件设置为可写状态。

3. 确保你的操作系统和Access版本是兼容的。如果你的操作系统或Access版本过旧,可能会导致权限问题。升级到最新的操作系统和Access版本可能会解决问题。

通过采取上述措施,你应该能够解决Run time error '70' Permission Denied错误,并成功生成所需的GUID。

0
0 Comments

根据上述内容,可以整理出以下文章:

标题:MS Access VBA Error: Run time error '70' Permission Denied 出现的原因和解决方法

在Microsoft的官方论坛中,有用户报告了一个名为"MS Access VBA Error: Run time error '70' Permission Denied"的错误。根据官方回复,这个问题是由于今年七月的安全更新引起的,并且是设计上的问题。为了防止恶意代码在Office应用程序中运行,这个控件被阻止使用。为了解决这个问题,官方提供了两种解决方法。

第一种解决方法是改变代码,使用Windows API CoCreateGuid代替CreateObject("Scriptlet.TypeLib").Guid。以下是具体的代码示例:

' No VT_GUID available so must declare type GUID
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 CreateGuidString()
    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
            CreateGuidString = strGuid
        End If
    End if
End Function

第二种解决方法是在注册表中添加一个键值来允许Scriptlet.TypeLib在Office应用程序中实例化。这种方法会减少Office 2017年7月安全更新所添加的安全保护措施。以下是详细的操作步骤:

1. 打开注册表编辑器。

2. 导航至:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\COM Compatibility{06290BD5-48AA-11D2-8432-006008C3FBFC}。注意:根据不同的Office版本,可能需要在HKEY_LOCAL_MACHINE下搜索正确的位置。

3. 添加ActivationFilterOverride键。

4. 设置DWORD值为1。

请注意,如果需要禁用ActivationFilterOverride设置,只需将DWORD值改为0,并重新启动Office应用程序。

需要注意的是,有用户在评论中提到这个解决方法在Windows 10与Office 365上并不适用。因此,这些解决方法可能适用于其他版本的Windows和Office,但并不保证在所有情况下都有效。

以上就是关于MS Access VBA Error: Run time error '70' Permission Denied问题的出现原因和解决方法的整理。希望对遇到类似问题的读者有所帮助。

0