Saltar al contenido

Error de MS Access VBA: Error de tiempo de ejecución ’70’ Permiso denegado

Mantén la atención ya que en este escrito vas a encontrar la solución que buscas.

Solución:

De Microsoft:

Este problema es por diseño, a partir de las actualizaciones de seguridad de julio. Este control está bloqueado como medida de seguridad para ayudar a evitar que se ejecute código malicioso en las aplicaciones de Office. Estamos trabajando para publicar un artículo de la base de conocimientos con el método recomendado. Hasta que ese KB esté listo, publicaré el contenido aquí:

Solución alterna
El método preferido es cambiar el código para usar Windows API CoCreateGuid (https://msdn.microsoft.com/en-us/library/windows/desktop/ms688568(v=vs.85).aspx) en lugar de 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

Solución alternativa

Esto le permitirá utilizar CreateObject("Scriptlet.TypeLib")sin embargo, disminuirá la protección de seguridad agregada por la actualización de seguridad de julio de 2017 de Office. Puede establecer un registro key eso permitirá Scriptlet.TypeLib para instanciar dentro de las aplicaciones de Office. Cuando este registro key está configurado, Office no bloqueará ningún uso de este control COM.

  • Abra el Editor del Registro.
  • Vaya a: ComputadoraHKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice16.0CommonCOM Compatibilidad06290BD5-48AA-11D2-8432-006008C3FBFC
    • Nota: es posible que deba buscar en el registro para encontrar la ubicación correcta en HKEY_LOCAL_MACHINE según la versión de Office instalada.
  • Añadir activaciónFilterOverride
  • Establecer DWORD: 1

Instrucciones detalladas:

  1. Haga clic en Inicio, haga clic en Ejecutar, escriba regedit en el cuadro Abrir y luego haga clic en Aceptar. Ubique y luego haga clic en lo siguiente key en el registro: HKEY_LOCAL_MACHINE
  2. En el menú Editar, señale Buscar y luego ingrese lo siguiente en el cuadro de texto Buscar: Compatibilidad COM
  3. Asegúrese de que Claves esté seleccionado y Valores y Datos no estén seleccionados. A continuación, seleccione Coincidencia completa string solo, haga clic en Buscar Siguiente Localizar y luego haga clic en el siguiente key: 06290BD5-48AA-11D2-8432-006008C3FBFC Nota: si el key no está presente, deberá agregarlo. En el menú Edición, seleccione Nuevo y, a continuación, haga clic en Clave. Escriba 06290BD5-48AA-11D2-8432-006008C3FBFC
  4. En el menú Edición, señale Nuevo y luego haga clic en Valor DWORD (32 bits)
  5. Escriba ActivationFilterOverride para el nombre de DWORD y luego presione Entrar.
  6. Haga clic con el botón derecho en ActivationFilterOverride y luego haga clic en Modificar.
  7. En el cuadro Información del valor, escriba 1 para habilitar la entrada del registro y luego haga clic en Aceptar.
  8. Tenga en cuenta que para deshabilitar la configuración ActivationFilterOverride, escriba 0 (cero) y luego haga clic en Aceptar.
  9. Salga del Editor del Registro y luego reinicie cualquier aplicación de Office abierta.

En Access, podemos bastar con esta función muy corta para generar un GUID aprovechando Application.StringFromGUID para convertir bytes a un GUID. Sin embargo, genera GUID bastante detallados con el formato 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

Puede eliminar los caracteres no deseados, por ejemplo, reemplazando la última línea de esta función con NewGUID = Mid(Application.StringFromGUID(b), 8, 36). Entonces, el formato será 00000000-0000-0000-0000-000000000000

Reseñas y puntuaciones

Más adelante puedes encontrar las notas de otros usuarios, tú igualmente tienes la libertad de mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *