사용자 정의 함수에 도구 설명을 추가하는 방법


78

Excel 2007에서 사용자 정의 함수에 설명 및 매개 변수 힌트를 추가하려면 어떻게합니까? 기본 제공 함수에 대한 함수 호출을 입력하기 시작하면 Excel에 설명 및 매개 변수 목록 (도구 설명)이 표시됩니다. 내가 정의한 기능에 대해 동일한 작업을하고 싶습니다.

수식 삽입 마법사뿐만 아니라 수식 상자에 키 "=myFun("를 입력 "("하면 도구 설명이 다음과 같이 표시됩니다."=average("

VBA 도움말에는 도움이없고 MSDN에는없고 내가 찾을 수있는 Excel 및 VBA 전용 포럼에는 전혀 도움이되지 않으므로 이것은 분명히 긴 기회입니다.



감사합니다 b. 약간 무섭게 보이지만 작동한다면 해결책입니다.
Marc Thibault

이제 Excel-DNA IntelliSense 확장이 포함 된 VBA 및 기타 유형의 추가 기능 (.NET, Python 등)에 대해 지원됩니다. excel-dna.net/2016/11/24/…
Govert

일반적으로 사용자에게 = myfunction ( "help")을 입력하여 구문 도움말을 얻고 if 문을 입력하여 intellisense를 반환하라는 지침을 제공합니다. Govert의 접근 방식도 작동하는지 궁금합니다.
Clouse24

답변:


60

Stephen Bullen의 Professional Excel Development에서는 UDF를 등록하는 방법에 대해 설명합니다.이를 통해 함수 인수 대화 상자에 설명을 표시 할 수 있습니다.

Function IFERROR(ByRef ToEvaluate As Variant, ByRef Default As Variant) As Variant
    If IsError(ToEvaluate) Then
        IFERROR = Default
    Else
        IFERROR = ToEvaluate
    End If
End Function

Sub RegisterUDF()
    Dim s As String
    s = "Provides a shortcut replacement for the common worksheet construct" & vbLf _
    & "IF(ISERROR(<expression>), <default>, <expression>)"

    Application.MacroOptions macro:="IFERROR", Description:=s, Category:=9
End Sub

Sub UnregisterUDF()
    Application.MacroOptions Macro:="IFERROR", Description:=Empty, Category:=Empty
End Sub

출처 : http://www.ozgrid.com/forum/showthread.php?t=78123&page=1

함수 인수 대화 상자를 표시하려면 함수 이름을 입력하고를 누릅니다 CtrlA. 또는 수식 입력 줄에서 "fx"기호를 클릭합니다.

여기에 이미지 설명 입력


메서드의 새로운 인수는 함수 매개 변수의 설명을 허용합니다.
Wilhelm

아직도 이해가되지 않습니다. 좀 더 간단하게 해주시 겠어요? IFERROR는 설명을 표시하는 원래 기능입니까, 아니면 UDF 등록에 필요한 도우미 기능입니까?!
블랙

1
몇 년 후 IFERROR가 원래 기능입니다. (un) RegisterUFD는 도움말 텍스트를 (un) 적용하는 도우미입니다.
Felício

97

툴팁 솔루션은 아니지만 적절한 해결 방법 :

UDF 입력을 =MyUDF(시작한 다음 CTRL+ Shift+ 를 누르면 A기능 매개 변수가 표시됩니다. 이러한 매개 변수에 의미있는 이름이있는 한 최소한 실행 가능한 프롬프트가 있습니다.

예를 들면 다음과 같습니다.

=MyUDF(+ CTRL+ Shift+A

다음과 같이 바뀝니다.

=MyUDF(sPath, sFileName)


4
사람들이 OP에 도움이된다는 의심에도 불구하고 이것은 스레드에서 가장 많이 찬성 된 입력입니다 (내 투표 포함). 이것은 SO가 특정 OP를 돕는 것이 아니라 일반적으로 커뮤니티를 돕는 것임을 증명합니다. 감사합니다.
hypers

13

이에 대한 답변을 수락 한 것을 알고 있지만, 이제 Excel-DNA 추가 기능을 통해 또는 내부에 인텔리 센스 서버를 등록하여 다른 엑셀 기능과 같이 인텔리 센스 스타일 완성 상자 팝업을 얻을 수있는 솔루션이 있습니다. 자신의 추가 기능. 여기를 참조하십시오 .

지금, 나는 그 일의 C #을 방법을 선호 - 그것은 엑셀-DNA, 구현이 그 모든 클래스 내부로 훨씬 간단 IExcelAddin추가 기능 프레임 워크 집어 가지고있다 AutoOpen()그리고 AutoClose()당신은 /에 가까운 추가를 열 때 실행 방금이 필요합니다 그래서. :

namespace MyNameSpace {
    public class Intellisense : IExcelAddIn {
        public void AutoClose() {
        }
        public void AutoOpen() {
            IntelliSenseServer.Register();
        }
    }
}

그런 다음 (그리고 이것은 github 페이지에서 가져온 것입니다) 함수에 ExcelDNA 주석을 사용하기 만하면됩니다.

[ExcelFunction(Description = "A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
    [ExcelArgument(Name = "Augend", Description = "is the first number, to which will be added")] 
    double v1,
    [ExcelArgument(Name = "Addend", Description = "is the second number that will be added")]     
    double v2)
{
    return v1 + v2;
}

ExcelDNA 주석을 사용하여 주석이 추가 된 경우 인텔리 젠스 서버는 인수 이름과 설명을 선택합니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

VBA와 함께 사용하는 예도 있지만 VBA에 너무 관심이 없기 때문에 해당 부분을 사용하지 않습니다.


1
VBA와 함께 Excel-DNA IntelliSense 확장을 사용하는 방법에 대한 글이 있습니다. fastexcel.wordpress.com/2016/10/07/…
Govert

8

함수의 "도움말"버전을 생성합니다. 자동 완성 기능의 바로 아래에 표시됩니다. 사용자는 지침을 위해 인접한 셀에서 대신 선택할 수 있습니다.

Public Function Foo(param1 as range, param2 as string) As String

    Foo = "Hello world"

End Function

Public Function Foo_Help() as String

Foo_Help = "The Foo function was designed to return the Foo value for a specified range a cells given a specified constant." & CHR(10) & "Parameters:" & CHR(10)
& "  param1 as Range   :   Specifies the range of cells the Foo function should operate on." & CHR(10)
&"  param2 as String  :   Specifies the constant the function should use to calculate Foo"
&" contact the Foo master at master@foo.com for more information."

END FUNCTION

캐리지 리턴은 자동 줄 바꿈을 사용하여 가독성을 향상시킵니다. 하나의 돌을 가진 2 마리의 새, 이제 기능에 몇 가지 문서가 있습니다.


2
이 방법 은 UDF에 대한 실제 Excel과 같은 도구 설명 을 원하는 경우 수행해야하는 모든 미친 일을 피할 수 있기 때문에 좋아 합니다.
Marcus Mangelsdorf

이것은 좋은 생각 인 것 같습니다. 사용자가주의를 기울이면 _Help 접미사가있는 대체 UDF가 표시됩니다. 나는 그것을 직접 시도했다. 그래도 좋은 시간을 보내고 있지 않습니다. 때때로 순환 참조 경고가 표시 될 때까지 재 계산주기를 거칩니다. 무슨 일인지 잘 모르겠습니다. 전례가 없으며 셀에 null 문자열을 반환합니다. 누군가 묻기 전에 UDF에 application.volatile (참 또는 거짓)이 없습니다.
riderBill 2015

6

또한이 매크로를 사용하여 인수 및 UDF에 설명을 할당 할 수 있습니다.

Private Sub RegisterMyFunction()
Application.MacroOptions _
    Macro:="SampleFunction", _      '' Your UDF name
    Description:="calculates a result based on provided inputs", _
    Category:="My UDF Category", _  '' Or use numbers, a list in the link below
    ArgumentDescriptions:=Array( _  '' One by each argument
        "is the first argument.  tell the user what it does", _
        "is the second argument.  tell the user what it does")
End Sub

여기Kendall 과 원래 게시물에 대한 크레딧 . 위해 UDF 카테고리


Workbook_Open ()에 배치했으며 Public이어야합니다. Excel 2013에서 작동합니다. 훌륭합니다!
chingNotCHing

5

@will의 방법이 최고입니다. 저처럼 이전에 ExcelDNA를 사용하지 않은 사람들에 대한 세부 정보에 대해 몇 줄만 추가하면됩니다.

https://github.com/Excel-DNA/IntelliSense/releases 에서 Excel-DNA IntelliSense를 다운로드합니다.

두 가지 버전이 있으며 하나는 64 용이며 Excel 버전을 확인하십시오. 제 경우에는 64 버전을 사용하고 있습니다.

Excel / Developer / Add-Ins / Browse를 열고 ExcelDna.IntelliSense64.xll을 선택합니다.

새 시트를 삽입하고 이름을 " IntelliSense "로 변경하고 함수 설명을 https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started 와 같이 추가합니다.

그럼 즐기세요! :)

여기에 이미지 설명 입력


2

불행히도 UDF 인수에 대한 도구 설명을 추가 할 수있는 방법이 없습니다.
Remou의 답변을 확장하려면 http://www.jkp-ads.com/Articles/RegisterUDF00.asp 에서 Function Wizard에 대한 설명에 대한보다 완전하지만 복잡한 접근 방식을 찾을 수 있습니다
.


Office 2010 인수는 이 답변을 통해 주석을 달 수 있기 때문에 .
Wilhelm

@Wilhelm, 맞지만 여전히 XL 2010에서도 툴팁을 제공하지 않습니다
Charles Williams

1

대답을 중심으로 많은 춤을 추고 있습니다. UDF 컨텍스트 도움말을 추가 할 수 있지만 모듈을 내보내고 텍스트 편집기에서 내용을 편집 한 다음 VBA로 다시 가져와야합니다. 다음은 Chip Pearson : 코드 속성 추가 의 예입니다.


0

먼저 기능적 UDF의 부수 기능으로 @ScottK의 접근 방식을 시도한 다음 문제가 발생했을 때 독립형 _Help 접미사 버전으로 시도했습니다 (아래 참조). 돌이켜 보면 후자의 접근 방식이 더 낫습니다. 사용자가 도구 팁을 볼 수있을만큼주의를 기울이고 기능 코드를 복잡하게 만들지 않는 것이 더 분명합니다.

부주의 한 사용자가 함수 이름을 입력하고 생각하는 동안 괄호를 닫으면 도움이 나타나고 곧바로 갈 것이라고 생각했습니다. 그러나 서식을 지정할 수없는 단일 셀에 많은 텍스트를 덤프하는 것은 좋은 생각처럼 보이지 않았습니다. 대신 인수가없는 셀에 함수를 입력 할 때 즉

   = interpolateLinear() 
or
   = interpolateLinear_Help()

도움말 텍스트와 함께 msgBox가 열립니다. msgBox는 ~ 1000 자, 어쩌면 1024 자까지로 제한됩니다.하지만 지나치게 속인 보간 함수에는 충분합니다 (간신히 8 ^ /). 그렇지 않은 경우 언제든지 사용자 양식을 열고 마을로 이동할 수 있습니다.

처음 메시지 상자를 열었을 때 성공한 것처럼 보였습니다. 그러나 몇 가지 문제가 있습니다. 물론 사용자는 인수없이 함수를 입력해야합니다 (_Help 접미사 UDF의 경우 +1).

문제는,이다 MSGBOX 통합 문서의 관련이없는 부분에서 작업 자발적 동안 연속적으로 여러 번 다시 열립니다. 말할 필요도없이 매우 성가신 일입니다. 때때로 순환 참조 경고를받을 때까지 계속됩니다. 그림을 이동. UDF가 셀 수식을 변경할 수 있다면 그것을 종료하기 위해 그렇게했을 것입니다.

Excel이 수식을 계속해서 다시 계산해야한다고 느끼는 이유를 모르겠습니다. _Help 독립형 또는 전체 버전 (도움말 모드)에는 선례 또는 종속 항목이 없습니다. 어디에도 application.volatile 문 이 없습니다 . 물론이 함수는 호출 셀에 값을 반환합니다. 아마도 재 계산을 유발할까요? 그러나 그것이 UDF가하는 일입니다. 나는 당신이 할 수 없다고 생각합니다 값을 반환합니다.

UDF에서 워크 시트 수식 을 수정할 수 없기 때문에 특정 문자열 ( 값)을 호출 셀 (UDF에서 값을 변경할 수있는 유일한 셀) 에 반환하려고했습니다 . 다음주기에서 application.caller 를 사용하는 셀 값 , 내 문자열을 찾아 내고 도움말 메시지를 다시 표시하지 않도록합니다. 당시에는 좋은 생각 같았지만 작동하지 않았습니다. 수면이 부족한 상태에서 어리석은 짓을했을 수도 있습니다. 나는 여전히 아이디어가 마음에 듭니다. 문제를 해결할 때 업데이트하겠습니다. 내 빠른 해결책은 도움말 상자에 다음 줄을 추가하는 것이 었습니다. " 긴급 상황에서만 도움을 구하십시오. 문제가되는 공식을 삭제하여 불행을 끝내십시오.

그 동안 Application.MacroOptions 접근 방식을 시도했습니다. 매우 쉽고 전문적으로 보입니다. 해결해야 할 한 가지 문제입니다. 나중에 그 접근 방식에 대한 별도의 답변을 게시 할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.