Excel 사용자 지정 함수 도구 설명에 대한 탐구


100

이 질문은 된 질문 전에 있지만, 각 시간은 허용 대답은 간단하게 사용하는 기능 설명을 제공하기 위해 사임입니다 Application.MacroOptions( VBA6 ) ( VBA7를 )하지만 내 문제가 해결되지 않는 있도록이 정보는 실제로 툴팁으로 표시되지 않습니다.

목표

우리 모두가 원하는 것은 어떤 수단 (VBA, VSTO 또는 COM 추가 기능) 으로든 사용자 지정 함수를 정의하고 사용자에게 함수 및 해당 매개 변수에 대한 팝업 / 도구 설명 설명의 이점을 제공하는 것입니다. 인라인 또는 수식 입력 줄의 모든 기본 제공 Excel 함수에 대해 나타납니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

이러한 요구에 대한 널리 받아 들여지는 대답은 커스텀 함수로는 불가능하다는 것이지만 저는 그 믿음에 도전하고 싶습니다.

문제

현재 내가 본 최고의 방법은 함수 대화 상자 (공식 막대의 fx 버튼)를 불러올 때 함수와 매개 변수 설명이 아래와 같이 나타나도록 함수를 정의하는 것입니다 (종종 위의 MacroOptions 호출 사용).

여기에 이미지 설명 입력

보시다시피 이것은 많은 매개 변수가있는 복잡한 함수입니다. 사용자가이 "함수 인수"대화 상자와이를 표시하는 방법을 모르고 대신 Excel의 표준 도구 설명에만 익숙한 경우 수식 이름 만 표시되고 추가 도움말은 표시되지 않습니다.

여기에 이미지 설명 입력

필요한 매개 변수를 올바르게 제공 할 기회가 없습니다. (물론 문서를 읽지 않고는 사용자가 없습니다.)

이제 고급 사용자는 Ctrl+ Shift+ 를 입력 A하면 다음과 같이 자동 완성 된 함수 매개 변수 목록이 부여 된다는 것을 알 수 있습니다 .

여기에 이미지 설명 입력

그러나 물론 위와 동일한 문제가 있습니다. 표준 엑셀 사용자는 첫 번째 이미지의 기본 동작에만 사용되며 해당 기능을 배우지 않았을 것입니다.

이 시점에서 이것이 왜 충분하지 않은지 명확해야하며 우리는 모든 내장 함수가 가지고있는 것을 원합니다. 사용자에게 함수 사용 방법을 알려주는 인라인 도구 설명입니다.

티즈

처음에는 기본 Excel 응용 프로그램 기능을 제외하고는 이것이 가능하지 않다고 확신했을 것입니다. 추가 기능 및 VBA는 확장 성 기능이며이 도구 설명은 단순히 확장 할 수 없습니다. 그러나이 이론은 Analysis Toolpak 추가 기능의 존재로 인해 어려움을 겪습니다. 물론 Microsoft에서 빌드되었지만 ANALYS32.xll은 VB, C, C ++ 및 C #에서 생성 할 수있는 것과 같은 독립 실행 형 XLL 추가 기능입니다. 아니나 다를까,이 XLL이 응용 프로그램에로드 될 때 기능 이 가능한 네이티브 엑셀 함수 같은 도구 조언을 만드는 :

여기에 이미지 설명 입력

이 정보가 어떻게 든이 XLL 파일에 인코딩되어 Excel로 전달되는 경우 자체 추가 기능으로 복제 할 수있는 방법이 있습니까? 이제 분석 툴팩에서 진행되는 모든 작업을 역 설계 할 수 있는지 확인하고 디 컴파일에 대해 조금 가르치기 시작할 시점입니다.

당신이 도울 수있는 방법

이 문제에 대해 공개적으로 사용 가능한 모든 정보를 조사했다고 거의 확신합니다. 누군가 내가 이것에 도움이 될 수있는 내가 모르는 것을 알고 있다면, 자유롭게 차임하십시오. 저는 컴파일 된 dll / xll을 리버스 엔지니어링하는 것에 매우 익숙하지 않습니다. 그래서 누군가가 Analysis32.xll의 로컬 복사본을 열고 싶어한다면 사용자 정의 함수 정의로 무슨 일이 벌어지고 있는지 알아내는 데는 많은 의무가 있습니다. 그렇지 않으면 막 다른 골목을 모두 밟고 내가 찾은 것을보고 할 때까지 계속해서이 문제를 조사 할 것입니다.


4
사용 가능한 기술을 사용하여 현재 Excel 버전에서 UDF 인수에 대한 도구 설명을 만들거나 표시 할 수 없습니다. MVP 제공 : answers.microsoft.com/en-us/office/forum/office_2007-customize/…
silkfire 2013 년

.NET Reflector는 ANALYS32.xll을 열지 못하여 .NET 어셈블리가 아니라는 결론을 내 렸습니다. 이것은 나를 놀라게한다. 어셈블리 언어로 디 컴파일해야 할 것 같습니까?
Alain

5
흥미롭게 들리지만 과거 (사무실 97)에서 winapi를 사용하는 툴팁을 만들었습니다. 그리고 그렇게 할 수 있습니다. 그게 흥미 롭다면 정보를 파헤쳐 서 답을 찾을 수 있습니다.
Archlight 2013-06-04

1
나는 당신도 그것을 얻을 것입니다, 이것을 파헤치는 데 시간이 걸릴 것입니다. 그러나 다른 사람들이 사용할 수 있도록 여기에 있어야합니다. winapi / vba /의 낮은 다운 및 사악한 콤보와 나는 그것을 vb.dll로 만든 것 같지만 .net으로 들어 올릴 가능성은 없습니다
Archlight

1
분명히 Excel 개발 팀은 여기에서이 기능에 대한 투표를하고 있습니다 : excel.uservoice.com/forums/…
Alain

답변:


40

나는 이것을 구현 하는 Excel-DNA IntelliSense 프로젝트 로 GitHub에 개념 증명 프로젝트를 게시했습니다 .

UI 자동화 클래스를 사용하여 적절한 Excel 사용자 인터페이스 이벤트를 모니터링하면 적절한 경우 양식이 표시됩니다.

코드는 Excel-DNA 추가 기능으로 래핑되어 있으며 내 Excel 2013 / Windows 8 컴퓨터에서 작동합니다. 다른 구성 (Windows Server 2008의 64 비트 Excel 2010)에서 테스트 한 결과 심각한 문제가있었습니다.

다음과 같이 Excel-DNA 속성으로 정의 된 C # 함수의 경우 :

[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;
}

함수 설명을 모두 얻습니다.

기능 설명

함수를 선택하면 인수 도움말이 표시됩니다.

인수 도움말

멋져 보이지만 여전히 매우 불안정하고 내 컴퓨터에서만 작동하며 때로는 Excel과 충돌합니다. 그래도 시작일지도 모르지만 ...


2014 년 5 월 9 일 업데이트 :

이전 Excel 및 Windows 버전에서 인수가 작동하도록하는 방법을 알아내는 데 약간의 진전이있었습니다. 그러나 모든 것을 신뢰할 수있게하려면 여전히 많은 작업이 필요합니다. 도움이 필요한 사람은 저에게 직접 연락하십시오.


2016 년 6 월 18 일 업데이트 :

Excel-DNA 추가 기능 및 VBA 기능에 대한 Excel UDF IntelliSense 지원이 현재 테스트 중입니다. 지침은 GitHub의 시작하기 페이지를 참조하십시오 .


안타깝게도 인수 도움말이 사용하는 UI 자동화 TextRange 지원에 Excel 2013 또는 Windows 8 또는 둘 모두가 필요한 것 같습니다. 나는 ... 일부 Windows UI 자동화 경험을 가지고 사람의 의견을 언제나 환영합니다
Govert

이전 컴퓨터로 컴파일하기 전에 이전 Excel 어셈블리를 참조하려고 했습니까?
Daniel Möller 2013

1
Excel 개체 모델에 대한 참조는 실제로 여기에 포함되지 않습니다. 그러나 일에 영향을 줄 수있는 확실히 다른 UI 자동화 버전은 ...있다
Govert

1
이것은 지금까지 어떤 것보다 앞서있는 거리이므로 현상금에 대한 내 표를 얻습니다. 가까운 장래에이 솔루션에 기여할 수 있는지 확인하려고하므로 내 풀 리퀘스트를 주시하십시오!
Alain

@Alain Govert에 잘하셨습니다! & Alain 나는 당신이 이것을 마스터하는 것을보고 싶습니다.
CodeCamper 2013-07-11

1

어때

  1. 셀의 키 누름 이벤트에 대한 입력 텍스트를 캡처합니다. 이렇게
  2. 텍스트가 사용자 정의 함수와 일치하는지 확인하십시오.
  3. 일치하는 경우 레이블 또는 모양과 같은 것을 표시하여 도구 설명으로 가장하십시오. 이렇게

이것이 허용됩니까?

조금 못 생겼지 만 더 쉽습니다.


이것은 내가 고려한 흥미로운 시작점이지만,보다 고급 형식의 수식 편집 (가운데를 클릭하고 문자 삭제 / 추가, 수식의 일부 강조 및 덮어 쓰기, 다른 공식의 중간에 사용자 정의 공식.) 키 누름을 확인하는 것 이상이 필요합니다. 편집 중에 공식 막대 또는 셀의 현재 내용을 살펴 봐야합니다. 이 역시 일부 가져온 dll 라이브러리를 사용하여 수행하고 해커를 처리 할 수 ​​있습니다. 확실히 탐험 할 가치가 있습니다.
Alain

-1

XLL이란 무엇입니까?

XLL은 Excel 또는 Excel 추가 기능 관리자에서 호출하는 여러 프로 시저를 내보내는 DLL입니다. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

XLL을 어떻게 개발합니까?

Visual C ++가 포함 된 Excel XLL SDK (또는 DLL을 컴파일하고 SDK 프로 시저를 호출 할 수있는 모든 것)

간단한 XLL을 만들기위한 빠른 가이드는 어디에서 찾을 수 있습니까?

http://support.microsoft.com/kb/178474

툴팁은 어떻게 얻습니까?

  1. 함수를 프로 시저로 구현하고 내보내기
  2. 구현 및 수출 절차 (무효) xlAutoOpen - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. - xlAutoOpen은 xlfRegister 호출해야 http://msdn.microsoft.com/en-us/library/office/bb687900.aspx을
  4. 툴팁의 경우 다음 사항에 특히주의하십시오. pxArgumentText, pxFunctionHelp, pxArgumentHelp1

안타깝게도 Analysis Toolpak 추가 기능에도 도구 설명이 없습니다.

내 솔루션은 잘못되었지만 원본 포스터에 잘못된 정보가 게시되었습니다. BINOMDIST와 함께 사진을 보여주는 경우, 그의 링크 가 이것이 ANALYS32.xll의 기능이 아님을 분명히 보여주는 경우 .

이것은 내가 불가능한 질문을 풀려고했다는 것을 의미합니다. 포스터가 요청한 것을 할 수있는 XLL이 없기 때문입니다. XLL의 도구 설명을 표시하는 Excel 버전을 찾으면 알려주십시오.

XLL 동작을 모방하기 위해 포스터가 요청한 내용에 대해 ANALYS32.xll이 수행하는 작업과 관련하여 내 대답이 가장 정확하다고 확신합니다.


3
안타깝게도 xlfRegister를 사용하여 UDF를 등록 해도 Excel에서 해당 정보를 시트 내 인텔리 센스 도구 설명으로 표시 하지 않습니다 . 여기에 등록 된 설명 등은 fx 버튼을 눌렀을 때 팝업되는 함수 인수 대화 상자에만 표시됩니다. 그러나 그것은 원래 포스터가 요구하는 것이 아닙니다.
Govert

@Govert는 2016 년에도 여전히 이런 식입니까?
beppe9000

@ beppe9000 예. Excel-DNA IntelliSense 확장 : github.com/Excel-DNA/IntelliSense
Govert
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.