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 deCreateObject("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:
- 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
- En el menú Editar, señale Buscar y luego ingrese lo siguiente en el cuadro de texto Buscar: Compatibilidad COM
- 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
- En el menú Edición, señale Nuevo y luego haga clic en Valor DWORD (32 bits)
- Escriba ActivationFilterOverride para el nombre de DWORD y luego presione Entrar.
- Haga clic con el botón derecho en ActivationFilterOverride y luego haga clic en Modificar.
- En el cuadro Información del valor, escriba 1 para habilitar la entrada del registro y luego haga clic en Aceptar.
- Tenga en cuenta que para deshabilitar la configuración ActivationFilterOverride, escriba 0 (cero) y luego haga clic en Aceptar.
- 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.