visual tiempo run permission permiso office microsoft mditool linea for error ejecucion docs docmd deprored denegado applications vba ms-access ms-office

run - Error de MS Access VBA: Error de tiempo de ejecución ''70'' Permiso denegado



vba access pdf (3)

Creo que este problema es el resultado de una actualización reciente de MS Office / Access o Windows 10. Cuando ejecuto este código:

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

Me sale un error: Permiso denegado en la declaración With. Esto es nuevo solo surgió después de que mis administradores actualizaron nuestros sistemas. No tengo opción para revertir las actualizaciones. ¿Alguien se encuentra con esto y tiene una solución?

SO: Windows 7 Enterprise Access Versión: 2010

Gracias


Como la actualización de Windows eliminó "Scriptlet.TypeLib", intente lo siguiente:

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

Alternativamente, si se está conectando a SQL Server 2008 o superior, intente usar la función SQL NEWID () en su lugar.


En Access, podemos bastar con esta función muy corta para generar un GUID al aprovechar Application.StringFromGUID para convertir bytes en 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


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 conocimiento con el método recomendado. Hasta que KB esté listo, publicaré el contenido aquí:

Solución alternativa El método preferido es cambiar el código para usar la API de Windows 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á usar CreateObject("Scriptlet.TypeLib") sin embargo, disminuirá la protección de seguridad agregada por la actualización de seguridad de Office de julio de 2017. Puede establecer una clave de registro que permita a Scriptlet.TypeLib crear instancias dentro de las aplicaciones de Office. Cuando se establece esta clave de registro, Office no bloqueará el uso de este control COM.

  • Editor de registro abierto.
  • Vaya a: Computadora / HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / Office / 16.0 / Common / COM Compatibility {06290BD5-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 su versión de Office instalada.
  • Añadir ActivationFilterOverride
  • 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. Busque y haga clic en la siguiente clave en el registro: HKEY_LOCAL_MACHINE
  2. En el menú Edición, seleccione Buscar y, a continuación, ingrese lo siguiente en el cuadro de texto Buscar qué: Compatibilidad COM
  3. Asegúrese de que Keys esté seleccionado y que los Valores y Datos estén deseleccionados. A continuación, seleccione Coincidir con toda la cadena, haga clic en Buscar siguiente localizar y luego haga clic en la siguiente clave: {06290BD5-48AA-11D2-8432-006008C3FBFC} Nota: si la clave no está presente, deberá agregarla. En el menú Editar, seleccione Nuevo y luego haga clic en Clave. Escriba {06290BD5-48AA-11D2-8432-006008C3FBFC}
  4. En el menú Edición, seleccione 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. Nota 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.