Вот, кстати, я писал два метода. Один проверяет - установлена ли данная настройка. Второй - устанавливает флаг. Не гарантирую, что будет работать со всеми версиями Excel:
X++:
static boolean checkTrustedAccessToVBA()
{
#winapi
container keyValue;
int regKey;
str keyPath = @"Software\Microsoft\Office\%1\Excel\Security";
;
keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion());
regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_READ);
if(!regKey)
return true;
keyValue = WinAPI::regGetValue(regKey, 'AccessVBOM');
WinAPI::regCloseKey(regKey);
if(conlen(keyValue) != 1)
return true;
if(conpeek(keyValue, 1) == 1)
return true;
else
return false;
X++:
static void setTrustedAccessToVBA()
{
#winapi
container keyValue;
int regKey;
str keyPath = @"Software\Microsoft\Office\%1\Excel\Security";
;
keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion());
regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_WRITE);
if(regKey)
{
WinAPI::regSetValueEx(regKey, 'AccessVBOM', #REG_DWORD, 1);
WinApi::regCloseKey(regKey);
}