Я в файле Excel, который положен на сервер для пользования всеми желающими использую форму ввода, на ней имеется контрол, который , вообще говоря, может отсутствовать на компьютере клиента ( MSComCt2.ocx - DateTimePicker, выбирает дату ). Поэтому при открытии книги я проверяю возможность создания некоторого тестового объекта Set ob = CreateObject("MsComCtl2.DTPicker") И в случае Err.Number<>0 копирую этот файл MSComCt2.ocx в системную папку клиента с серверного директория и запускаю shell "regsvr32 -s C:\WINNT\System32\mscomct2.ocx" Если после этого Err.Number<>0 то закрываю книгу по аварийному останову без сохранения.
Проблема в том, что регистрация может быть неуспешной , а Err.Number =0 . Тогда пользователь, запустивший книгу, может запросто закрыть ее с сохранением. При этом из формы теряются ссылки на данный контрол и книга при открытии уже оказывается без них, и , как следствие, неработоспособной. Помогите, если кто знает надежный способ регистрации контролов приложениях MS-Office.
Привет, насчет офиса не знаю, мало имел с ним дело. Но оставлю примерчик регистрации OCX просто в VB:
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 Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Function Reg(ByVal Str_Reg As String) As Long On Error Resume Next Reg = LoadLibrary(Str_Reg) CallWindowProc GetProcAddress(Reg, "DllRegisterServer"), 0, 0, 0, 0 End Function Потом просто вызываешь функцию: