2017-07-26 12 views
6

मेरा मानना ​​है कि इस मुद्दे पर एमएस ऑफ़िस/पहुँच या Windows 10 हाल ही के अपडेट का परिणाम है जब मैं इस कोड को चलाएँ:एमएस एक्सेस VBA त्रुटि: चलने का समय त्रुटि '70' अनुमति अस्वीकृत

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

मैं एक त्रुटि प्राप्त करें: अनुमति के साथ अनुमति अस्वीकार कर दी गई है। मेरे व्यवस्थापक ने हमारे सिस्टम को अपडेट करने के बाद यह केवल नया ही फसल लगाया है। मेरे पास अपडेट वापस रोल करने का कोई विकल्प नहीं है। कोई भी इस पर आ गया है और चारों ओर एक काम है?

ओएस: विंडोज 7 एंटरप्राइज पहुँच संस्करण: 2010

धन्यवाद

उत्तर

10

From Microsoft:

This issue is by design, as of the July security updates. This control is blocked as a security measure to help prevent malicious code from running in Office applications. We are working on getting a knowledgebase article out with the recommended method. Until that KB is ready, I'll post the content here:

Workaround The preferred method is to change the code to use Windows API CoCreateGuid (https://msdn.microsoft.com/en-us/library/windows/desktop/ms688568(v=vs.85).aspx) instead of 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 

Alternate Workaround

This will allow you to use CreateObject("Scriptlet.TypeLib") however it will lessen the security protection added by the Office July 2017 security update. You can set a registry key that will allow Scriptlet.TypeLib to instantiate inside of Office applications. When this registry key is set, Office will not block any use of this COM control.

  • Open Registry Editor.
  • Go to: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Common\COM Compatibility{06290BD5-48AA-11D2-8432-006008C3FBFC}
    • Note: you may need to search the registry to find the correct location under HKEY_LOCAL_MACHINE based on your installed Office version.
  • Add ActivationFilterOverride
  • Set DWORD: 1

Detailed Instructions:

  1. Click Start, click Run, type regedit in the Open box, and then click OK. Locate and then click the following key in the registry: HKEY_LOCAL_MACHINE
  2. On the Edit menu, point to Find, and then enter the following in the Find What: text box: COM Compatibility
  3. Ensure Keys is selected, and Values and Data are deselected. Next select Match whole string only, click Find Next Locate and then click the following key: {06290BD5-48AA-11D2-8432-006008C3FBFC} Note: if the key is not present you will need to add it. On the Edit menu, point to New, and then click Key. Type in {06290BD5-48AA-11D2-8432-006008C3FBFC}
  4. On the Edit menu, point to New, and then click DWORD (32-bit) Value
  5. Type ActivationFilterOverride for the name of the DWORD, and then press Enter.
  6. Right-click ActivationFilterOverride, and then click Modify.
  7. In the Value data box, type 1 to enable the registry entry, and then click OK.
  8. Note to disable the ActivationFilterOverride setting, type 0 (zero), and then click OK.
  9. Exit Registry Editor, and then restart any open Office application.
+1

मुझे इसे संस्करण संख्या के बिना HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Microsoft \ Office \ Common में भी जोड़ना पड़ा। – starskythehutch

0

के बाद से 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() फ़ंक्शन का उपयोग करने का प्रयास करें।

संबंधित मुद्दे