Человек не хочет тупо выполнять какое-то действие и проверять - удалось/не удалось. Он хочет вначале узнать, имеет ли смысл вообще делать это действие.
По теме. GUID всегда будет одинаковый, на любой машине. Но проверять в реестре не самый лучший способ.
Попробуй что-то вроде этого:
- Код: Выделить всё
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
...
bSuccess = False
L = LoadLibrary("comdlg32")
If L <> 0 Then
If GetProcAddress(L, "DllRegisterServer") <> 0 Then bSuccess = True
End If
FreeLibrary L
Debug.Print bSuccess
Смысл в том, что любой саморегистрирующийся COM-объект обязательно имеет процедуру DllRegisterServer. Если не удается найти адрес этой процедуры (или вообще, загрузить библиотеку), то скорее всего msoutl.olb не зарегистрирован в системе и не находится в Path.
Но вообще-то это коряво, наверняка есть более прямой способ.
Lasciate ogni speranza, voi ch'entrate.