2014-12-18 4 views
-2

CHM 도움말 파일로 Excel 추가 기능을 개발 중입니다. CHM에는 Excel의 "함수 삽입"대화 상자에서 접근하려고하는 주제가 있습니다. 이것은 다음과 같이 내가 HH.EXE를 호출 할 때 확인 : "@MSITSTORE : MK < 경로 - 투 - 내 - CHM 파일 >"Excel 2010 "이 함수에 대한 도움말"은 -http : //mapid 매개 변수로 HH.EXE를 시작하지 않습니다.

HH.EXE는 1234 -mapid

나는 내 UDF를 모두 등록 Application.MacroOptions() 함수를 사용하여 적절한 매개 변수 (Macro, Category, HelpContextID 및 HelpFile)를 전달하십시오.

"이 기능의 도움말"링크를 누르면 HH.EXE가 올바른 CHM 경로와 파일 이름으로 호출됩니다. 그러나 HH.EXE 호출에 사용 된 -mapid 매개 변수는 없습니다. 따라서 CHM 파일을로드 할 때 HH는 원하는 항목으로 이동하지 않습니다.

Excel에서이 매개 변수를 생략 할 수있는 이유를 알고 있거나 추측 할 수 있습니까?

감사합니다.

+0

내 대답을 게시 한 후 질문해야 할 질문 하나 : 문맥상의 도움이 필요한 ID로 내부 CHM을 컴파일 한 적이 있습니까? –

+0

네, CHM에는 ID가 CHM에 존재합니다. 위의 HH 명령을 호출하면 해당 항목으로 바로 이동합니다. 또한, 나는 더 구체적 이어야만했습니다. C# .NET을 사용하여 추가 기능을 개발하고 C#에서 Application.MacroOptions을 수행합니다. – Roger

+0

또한 Excel에서는 HH를 다음과 같이 시작합니다. HH.EXE "mk : @MSITSTORE : 이것은 작업 관리자를 사용하고 HH.EXE를 호출하는 데 사용 된 명령 줄을 관찰함으로써 확인됩니다 – Roger

답변

1

스냅 샷에 표시된 것과 같은 것을 원한다는 것을 이해합니다. 상황에 맞는 도움말은 복잡합니다.

HTMLHelp (CHM) API를 호출하기위한 버튼과 코드 용 샘플 코드를 추가합니다.

Office 2007은 내 컴퓨터에만 설치됩니다.

enter image description here

은 HTMLHELP API 호출하여 수행됩니다 (코드는 (1)) :

'****************************************************************************** 
    '----- Modul - definition for HTMLHelp 
    '----- (c) Ulrich Kulle, http://www.help-info.de/en/Visual_Basic_Applications/vba.htm 
    '----- 2002-08-26 Version 0.2.xxx 
    '****************************************************************************** 
    '----- Portions of this code courtesy of David Liske. 

    Declare Function IsWindow Lib "user32.dll" (ByVal hwnd As Long) As Long 

    Private Declare Function SendMessage Lib "user32" _ 
    Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _ 
    ByVal wParam As Long, lParam As Any) As Long 

    Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _ 
        (ByVal hwndCaller As Long, ByVal pszFile As String, _ 
        ByVal uCommand As Long, ByVal dwData As Long) As Long 

    Declare Function HTMLHelpTopic Lib "hhctrl.ocx" Alias "HtmlHelpA" _ 
      (ByVal hwndCaller As Long, ByVal pszFile As String, _ 
      ByVal uCommand As Long, ByVal dwData As String) As Long 

    Private Declare Function HtmlHelpSearch Lib "hhctrl.ocx" Alias "HtmlHelpA" _ 
      (ByVal hwndCaller As Long, ByVal pszFile As String, _ 
      ByVal uCommand As Long, dwData As HH_FTS_QUERY) As Long 

    '--- to keep the handle of the HH windows when calling help by API -------- 
    Public HHwinHwnd As Long 

    '--- some constants used by the API --------------------------------------- 
    Public Const HH_DISPLAY_TOPIC = &H0  ' select last opened tab, [display a specified topic] 
    Public Const HH_DISPLAY_TOC = &H1  ' select contents tab, [display a specified topic] 
    Public Const HH_DISPLAY_INDEX = &H2  ' select index tab and searches for a keyword 
    Public Const HH_DISPLAY_SEARCH = &H3 ' select search tab and perform a search 

    Public Const HH_HELP_CONTEXT = &HF  ' display mapped numeric value in dwData 

    Public Const HH_CLOSE_ALL = &H12 


    Public Type HH_FTS_QUERY    ' UDT for accessing the Search tab 
     cbStruct   As Long    ' Sizeof structure in bytes. 
     fUniCodeStrings As Long    ' TRUE if all strings are unicode. 
     pszSearchQuery As String   ' String containing the search query. 
     iProximity  As Long    ' Word proximity. 
     fStemmedSearch As Long    ' TRUE for StemmedSearch only. 
     fTitleOnly  As Long    ' TRUE for Title search only. 
     fExecute   As Long    ' TRUE to initiate the search. 
     pszWindow   As String   ' Window to display in 
    End Type 

    Public Function HFile(ByVal i_HFile As Integer) As String 
    '----- Set the string variable to include the application path of helpfile 
     Select Case i_HFile 
     Case 1 
     HFile = ThisWorkbook.Path & "\CHM-example.chm" 
     Case 2 
    '----- Place other Help file paths in successive case statements 
     HFile = ThisWorkbook.Path & "\CHM-example.chm" 
     End Select 
    End Function 

    Public Sub ShowContents(ByVal intHelpFile As Integer) 
     HHwinHwnd = HtmlHelp(hwnd, HFile(intHelpFile), HH_DISPLAY_TOC, 0) 
    End Sub 

    Public Sub ShowIndex(ByVal intHelpFile As Integer) 
     HHwinHwnd = HtmlHelp(hwnd, HFile(intHelpFile), HH_DISPLAY_INDEX, 0) 
    End Sub 

    Public Sub ShowTopic(ByVal intHelpFile As Integer, strTopic As String) 
     HHwinHwnd = HTMLHelpTopic(hwnd, HFile(intHelpFile), HH_DISPLAY_TOPIC, strTopic) 
    End Sub 

    Public Sub ShowTopicID(ByVal intHelpFile As Integer, IdTopic As Long) 
     HHwinHwnd = HtmlHelp(hwnd, HFile(intHelpFile), HH_HELP_CONTEXT, IdTopic) 
    End Sub 

    Public Sub CloseHelp(ByVal hwnd As Long) 
    Const WM_CLOSE = &H10 
    If IsWindow(hwnd) Then 
     SendMessage hwnd, WM_CLOSE, 0, 0 
    End If 
    End Sub 
    '------------------------------------------------------------------------------ 
    '----- display the search tab 
    '----- bug: start searching with a string dosn't work 
    '------------------------------------------------------------------------------ 
    Public Sub ShowSearch(ByVal intHelpFile As Integer) 
    Dim searchIt As HH_FTS_QUERY 
     With searchIt 
     .cbStruct = Len(searchIt) 
     .fUniCodeStrings = 1& 
     .pszSearchQuery = "foobar" 
     .iProximity = 0& 
     .fStemmedSearch = 0& 
     .fTitleOnly = 1& 
     .fExecute = 1& 
     .pszWindow = "" 
     End With 
     Call HtmlHelpSearch(0&, HFile(intHelpFile), HH_DISPLAY_SEARCH, searchIt) 
    End Sub 

그리고 몇 가지 예제 코드 (2) 추가 :

Sub AddUDFToCategory() 
    '------------------------------------------------------------------------------ 
    ' insert after Description line [optional]: Category:=2, _ => Date & Time 
    '------------------------------------------------------------------------------ 
    ' If the UDF's are in an Addin (.xla) it's better to qualify the function name 
    ' like this: 
    ' Macro:=ThisWorkbook.Name & "!" & "DayName" 
    '------------------------------------------------------------------------------ 
    ' see also Excel help for Application.MacroOptions 
    '------------------------------------------------------------------------------ 
     application.MacroOptions _ 
      Macro:="TestMacro", _ 
      Description:="This function gives back the 'Hello world' message!", _ 
      Category:=2, _ 
      HelpFile:=ThisWorkbook.Path & "\CHM-example.chm", _ 
      HelpContextID:=10000 
     application.MacroOptions _ 
      Macro:="DayName", _ 
      Description:="A Function That Gives the Name of the Day", _ 
      Category:=2, _ 
      HelpFile:=ThisWorkbook.Path & "\CHM-example.chm", _ 
      HelpContextID:=20000 
    End Sub 

    Function TestMacro() 
    '---------------------------------------------------------------- 
    ' Display a message box with a help button linked to a help topic 
    '---------------------------------------------------------------- 
     MsgBox "The 'Hello World' message for testing this function!.", _ 
     Buttons:=vbOKOnly + vbMsgBoxHelpButton, _ 
     HelpFile:=ThisWorkbook.Path & "\CHM-example.chm", _ 
     Context:=20010 
    End Function 

    Function DayName(InputDate As Date) 
    '--------------------------------------------- 
    '--- A Function That Gives the Name of the Day 
    '--- http://www.fontstuff.com/vba/vbatut01.htm 
    '--------------------------------------------- 
     Dim DayNumber As Integer 
     DayNumber = Weekday(InputDate, vbSunday) 
     Select Case DayNumber 
      Case 1 
       DayName = "Sunday" 
      Case 2 
       DayName = "Monday" 
      Case 3 
       DayName = "Tuesday" 
      Case 4 
       DayName = "Wednesday" 
      Case 5 
       DayName = "Thursday" 
      Case 6 
       DayName = "Friday" 
      Case 7 
       DayName = "Saturday" 
     End Select 
    End Function 

을 A에 대한 작동 예 Online Help and Visual Basic for Applications 로 문의하십시오. VBA - 다운로드 및 다운로드 링크 Download Visual Basic for Applications example project (EXCEL)을 검색합니다.

  1. 다운로드 임시 디렉토리에 위의 링크에서 ZIP 파일, 오른쪽, 먼저 저장 한 ZIP 파일을 클릭하여 속성을 클릭하고 임시 디렉토리에 압축을 풉니 다
  2. 차단 해제를 클릭합니다. 테스트 열린 CHM 등
  3. 먼저 보안 경고 (엑셀) 및
  4. 는 엑셀 예제 워크 시트의 지침에 따라 활성화 설정에 모습을 더블 클릭
  5. 더블 클릭 CHM_VBA_example.xls
  6. 에 의해 첫 번째 파일.

자세한 내용은 Using the VBA Excel Example File을 참조하십시오.