|
Подключить библиотеку без привязки к версии
|
|
|
|
mokc0der |
Пятница, 10 Ноября 2006, 10:24
|
Участник
Профиль
Группа: Профессионалы
Сообщений: 1278
Регистрация: 20.12.2001
Из: Москва
Пользователь №: 859
Конфигурация
Корпус: Thermaltake LanMoto Процессор: Другой Материнская плата: ASUS A8N-SLI Оперативная память: DIMM DDR PC3200 2048 Mb Видеокарта: ASUS X300SE Жесткий диск (винчестер): WD3200KS + ST3200822А Дисковод: 3.5" CD/DVD: NEC ND-4571 Модем: Zyxel 662HW Сетевой адаптер: built-in Звуковая плата: built-in AC97 Монитор: Sony SDM S71R Операционная система: WinXP, Vista Прочее: Bluetooth dongle
IBM T42
|
Есть небольшая база на Access через Tools-References подключена библиотека Excel для выгрузки отчетов. Проблема заключается в том что у меня на компе Office 2003 при установке на компы с версиями отличными от 2003 (2002, 2000) необходимо через меню Tools-References удалить ссылку на Excel 2003 и создать на 2002 (2000). Можно ли автоматизировать это процесс. Например чтоб понять что ссылка "сломана" можно: Код Private Sub Form_Load() Dim ref As Reference
' Enumerate through References collection. For Each ref In References ' Check IsBroken property. If ref.IsBroken = True Then MsgBox "GUIDs of broken references:" & ref.Guid, vbCritical, "Ошибка! Библиотека не подключена." End If Next ref End Sub Коллекция References не позволяет подкючать новые библиотеки. Может есть еще возможности ?
|
|
|
|
|
pashulka |
Пятница, 10 Ноября 2006, 16:20
|
Участник
Профиль
Группа: Участник
Сообщений: 216
Регистрация: 13.07.2003
Пользователь №: 5551
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
Если ссылка Missing ... то используя References Вы сможете подключить нужную библиотеку, но при таком способе, нужно ещё найти месторасположение нужного файла. Код Application.References.AddFromFile Filename:="С:\Program Files\Microsoft Office\Office\Excel.exe" Но можно поступить по другому, а именно: использовать позднее связывание, которое позволит Вам обойтись без подключения нужных ссылок, но потребует замены чужих констант на их числовые значения или явные описания этих констант, т.е. вместо : Код Dim iXLApp As New Excel.Application
With iXLApp .Visible = True .Workbooks.Add xlWBATWorksheet ... End With можно использовать : Код With CreateObject("Excel.Application") .Visible = True .Workbooks.Add -4167 ... End With или Код Const xlWBATWorksheet = -4167
With CreateObject("Excel.Application") .Visible = True .Workbooks.Add xlWBATWorksheet End With
|
|
|
|
|
mokc0der |
Пятница, 10 Ноября 2006, 23:43
|
Участник
Профиль
Группа: Профессионалы
Сообщений: 1278
Регистрация: 20.12.2001
Из: Москва
Пользователь №: 859
Конфигурация
Корпус: Thermaltake LanMoto Процессор: Другой Материнская плата: ASUS A8N-SLI Оперативная память: DIMM DDR PC3200 2048 Mb Видеокарта: ASUS X300SE Жесткий диск (винчестер): WD3200KS + ST3200822А Дисковод: 3.5" CD/DVD: NEC ND-4571 Модем: Zyxel 662HW Сетевой адаптер: built-in Звуковая плата: built-in AC97 Монитор: Sony SDM S71R Операционная система: WinXP, Vista Прочее: Bluetooth dongle
IBM T42
|
pashulka, спасибо!!! найти путь можно как указано - http://support.microsoft.com/kb/234788код: Код Option Compare Database Option Explicit Const INSTALLSTATE_NOTUSED = -7 'component disabled Const INSTALLSTATE_BADCONFIG = -6 'configuration data corrupt Const INSTALLSTATE_INCOMPLETE = -5 'installation suspended or in progress Const INSTALLSTATE_SOURCEABSENT = -4 'run from source, source is unavailable Const INSTALLSTATE_MOREDATA = -3 'return buffer overflow Const INSTALLSTATE_INVALIDARG = -2 'invalid function argument Const INSTALLSTATE_UNKNOWN = -1 'unrecognized product or feature Const INSTALLSTATE_BROKEN = 0 'broken Const INSTALLSTATE_ADVERTISED = 1 'advertised feature Const INSTALLSTATE_REMOVED = 1 'component being removed (action state, not settable) Const INSTALLSTATE_ABSENT = 2 'uninstalled (or action state absent but clients remain) Const INSTALLSTATE_LOCAL = 3 'installed on local drive Const INSTALLSTATE_SOURCE = 4 'run from source, CD or net Const INSTALLSTATE_DEFAULT = 5 'use default, local or source
Declare Function MsiGetComponentPath Lib "msi.dll" Alias "MsiGetComponentPathA" (ByVal ProductCode As String, ByVal ComponentCode As String, ByVal Path As String, cbPath As Long) As Long ' from http://support.microsoft.com/kb/234788 Const cWord2003 = "{1EBDE4BC-9A51-4630-B541-2561FA45CCC5}" Const cExcel2003 = "{A2B280D4-20FB-4720-99F7-40C09FBCE10A}" Const cPowerPoint2003 = "{C86C0B92-63C0-4E35-8605-281275C21F97}" Const cAccess2003 = "{F2D782F8-6B14-4FA4-8FBA-565CDDB9B2A8}" Const cOffice2003 = "{90110409-6000-11D3-8CFE-0150048383C9}"
Const cWordXP = "{8E46FEFA-D973-6294-B305-E968CEDFFCB9}" Const cExcelXP = "{5572D282-F5E5-11D3-A8E8-0060083FD8D3}" Const cPowerPointXP = "{FC780C4C-F066-40E0-B720-DA0F779B81A9}" Const cAccessXP = "{CC29E967-7BC2-11D1-A921-00A0C91E2AA3}" Const cOfficeXP = "{20280409-6000-11D3-8CFE-0050048383C9}"
Const cWord2000 = "{CC29E963-7BC2-11D1-A921-00A0C91E2AA2}" Const cExcel2000 = "{CC29E96F-7BC2-11D1-A921-00A0C91E2AA2}" Const cPowerPoint2000 = "{CC29E94B-7BC2-11D1-A921-00A0C91E2AA2}" Const cAccess2000 = "{CC29E967-7BC2-11D1-A921-00A0C91E2AA2}" Const cOffice2000 = "{00000409-78E1-11D2-B60F-006097C998E7}" Function GetOfficePath(AppName$) As String Dim Path$, cbPath&, ComponentState&, ProductCode$, Component$ Path = Space$(257) cbPath = 257 If Len(AppName$) < 5 Then Exit Function Component$ = Left$(AppName$, Len(AppName$) - 4) Select Case Right(AppName$, 4) Case "2000" ProductCode = cOffice2000 Component = IIf(Component = "Word", cWord2000, IIf(Component = "Excel", cExcel2000, IIf(Component = "Access", cAccess2000, IIf(Component = "PowerPoint", cPowerPoint2000, "")))) Case "2002" ProductCode = cOfficeXP Component = IIf(Component = "Word", cWordXP, IIf(Component = "Excel", cExcelXP, IIf(Component = "Access", cAccessXP, IIf(Component = "PowerPoint", cPowerPointXP, "")))) Case "2003" ProductCode = cOffice2003 Component = IIf(Component = "Word", cWord2003, IIf(Component = "Excel", cExcel2003, IIf(Component = "Access", cAccess2003, IIf(Component = "PowerPoint", cPowerPoint2003, "")))) Case Else MsgBox "Unknown software " & AppName, vbCritical Or vbOKOnly ProductCode = "" End Select ComponentState = MsiGetComponentPath(ProductCode, Component, Path, cbPath) If ComponentState = INSTALLSTATE_LOCAL Or ComponentState = INSTALLSTATE_SOURCE Then Path = Left$(Path, cbPath) Else Path = "" End If GetOfficePath = Path End Function
|
|
|
|
|
mokc0der |
Четверг, 01 Февраля 2007, 10:51
|
Участник
Профиль
Группа: Профессионалы
Сообщений: 1278
Регистрация: 20.12.2001
Из: Москва
Пользователь №: 859
Конфигурация
Корпус: Thermaltake LanMoto Процессор: Другой Материнская плата: ASUS A8N-SLI Оперативная память: DIMM DDR PC3200 2048 Mb Видеокарта: ASUS X300SE Жесткий диск (винчестер): WD3200KS + ST3200822А Дисковод: 3.5" CD/DVD: NEC ND-4571 Модем: Zyxel 662HW Сетевой адаптер: built-in Звуковая плата: built-in AC97 Монитор: Sony SDM S71R Операционная система: WinXP, Vista Прочее: Bluetooth dongle
IBM T42
|
pashulka, к сожалению не работает код Код If Application.BrokenReference Then ' Enumerate through References collection. For Each ref In References ' Check IsBroken property. If ref.IsBroken = True Then Debug.Print ref.Guid, ref.Name If ref.Name = "Excel" Then ExcelPath = GetOfficePath("Excel2003") If ExcelPath = "" Then ExcelPath = GetOfficePath("Excel2002") If ExcelPath = "" Then ExcelPath = GetOfficePath("Excel2000") If ExcelPath = "" Then MsgBox "Excel не установлен" Exit Sub End If Application.References.Remove ref!Excel Application.References.AddFromFile (ExcelPath) End If End If Next ref End If
т.к. если есть broken link - VBA ругается 'could not load DLL' на первой же строке Можешь что-нибудь подсказать ?
|
|
|
|
|
pashulka |
Вторник, 13 Февраля 2007, 1:35
|
Участник
Профиль
Группа: Участник
Сообщений: 216
Регистрация: 13.07.2003
Пользователь №: 5551
Конфигурация
Корпус: -- Процессор: -- Материнская плата: -- Оперативная память: -- Видеокарта: -- Жесткий диск (винчестер): -- Дисковод: -- CD/DVD: -- Модем: -- Сетевой адаптер: -- Звуковая плата: -- Монитор: -- Операционная система: -- Прочее: --
|
mokc0der, К сожалению, нет
|
|
|
|
|
|
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
|
0 Пользователей:
|
|
© Copyright by WinCity.Ru 2001 - 2008 | Обратная связьУслуги веб-хостинга предоставлены компанией MTW.RU
|
|