Страница 1 из 1

Создание справочной системы

Добавлено: 06 ноя 2008, 16:09
AlexZZZ
Уважаемые коллеги, добрый день!
Предлагаю обсудить такую интетесную тему, как создание собственной справочной системы для своих проектов. Очень подробно это написано у Уокенбаха, но перепробовав разные варианты, пришёл к мнению, что удобнее всего создать скомпилированный файл справки .chm и открывать его кодом:

Код: Выделить всё

Sub ShowHelp()
    Application.Help ThisWorkbook.Path & "\Help.chm", 0
End Sub
Одна проблема: файл может у пользователя и потеряться.

Вопрос №1: Как можно в VBA просто проверить файл на наличие.

Вопрос №2: Можно ли сделать корректную справку путём внедрения в лист OLE-объекта ( chm - файла) и открывать её по запросу макросом?
Попробовал так сделать, путём записи макроса, записалось следующее:

Код: Выделить всё

Sub Макрос1()
    ActiveSheet.Shapes("Object 1").Select
    Selection.Verb Verb:=xlPrimary
End Sub
Но во-первых, открытая справка отображается некорректно (листы пустые);
во вторых, система безопасности Excel ругается на возможные вирусы в файле и метод "Application.DisplayAlerts = False" не работает (выдаёт ошибку 1004: "Метод Verb из класса OLEObject завершён неверно").
Можно ли решить эти проблемы?

Re: Создание справочной системы

Добавлено: 06 ноя 2008, 18:46
Aent
Вопрос №1:

Код: Выделить всё

 
if Len(Dir(ThisWorkbook.Path & "\Help.chm")) > 0 then 
'файл присутствует           
end if
Вопрос №2:
IMHO не нужно этого делать.
Если xls файл не модифицируется или код отделён от данных - самое простое сделать isо, cодержащий все не изменяемые файлы проекта и монтировать его чем нибудь типа Daemon Tools :)

Re: Создание справочной системы

Добавлено: 06 ноя 2008, 23:43
Naeel Maqsudov
2)
Поддерживаю. Не надо так делать.
Но можно еще проще. При установке CHM класть в "%SystemRoot%\Help". И нукуда уже файл оттуда не потеряется. Кроме того путь к файлу в этом случае указывать не надо. Windows всегда найдет правильно расположенный chm просто по имени.

Re: Создание справочной системы

Добавлено: 07 ноя 2008, 00:22
Aent
Но можно еще проще. При установке CHM класть в "%SystemRoot%\Help"
Cогласен. Просто меня клиенты уже затерроризировали требованием мобильности и портативности до уровня рефлекса ;)

Re: Создание справочной системы

Добавлено: 07 ноя 2008, 15:21
AlexZZZ
Спасибо Вам большое за помощь! Просто и изящно.
Жаль, конечно, что вариант с OLE не проходит. Такая казалось бы потенциально полезная функция и такая практически бесполезная. Вот уж действительно - работа с Excel - поиск оптимальных компромиссов.
А как проверить наличие файла "Help.chm" в "%SystemRoot%\Help" ?

Re: Создание справочной системы

Добавлено: 07 ноя 2008, 20:11
Aent
Hint:

Код: Выделить всё

'на уровне модуля
Private Declare Function GetSystemDirectory Lib "kernel32" Alias _
  "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
'.........................................
Public Function GetHelpDir() As String
    
    Dim sBuf As String * 256
    Dim l As Long
    
    l = GetSystemDirectory(sBuf, Len(sBuf))
    GetHelpDir = Replace(Trim$(Left$(sBuf, l)), "\system32", "\Help", , vbTextCompare)
    
End Function

Re: Создание справочной системы

Добавлено: 07 ноя 2008, 21:49
AlexZZZ
Aent, спасибо ещё раз, всё работает.
Может, посоветуете, где можно почитать (на русском языке) по программированию Win API из VBA, а то для меня это тёмный лес.

Re: Создание справочной системы

Добавлено: 07 ноя 2008, 22:49
Aent
Начните с лекции Биллига:
http://citforum.univ.kiev.ua/programming/vb/vba_winapi/
За маааленькую денюжку
https://www.softkey.ru/catalog/program. ... gdesc=long
можно приобрести русский хелп
(демка http://megalib.com/books/922/index.html)
А вообще есть фундаментальная книга Дэна Эпплмана "Win32 API и Visual Basic для профессионалов"
(качать например отсюда http://www.brain2life.com/book/628.html)
Разница в применении API в VB6 и в VBA минимальна. Главыпро использование API есть практически во всех продвинутых руководствах по VBA .Например, посмотрите
ИзображениеПрограммирование на Visual Basic 6 и VBA. Руководство разработчика [LEFT]Кен Гетц, Майк Гилберт[/LEFT]

Re: Создание справочной системы

Добавлено: 10 ноя 2008, 13:13
AlexZZZ
Спасибо, думаю это будет полезно не только мне. К описанному выше могу добавить также найденное мною: http://www.microsoft.com/Rus/Msdn/Activ ... fault.mspx (не ругайте за источник, на первый взгляд, довольно содержательно).