web-dev-qa-db-ja.com

Excelカスタム関数のツールチップの探求

この質問は askedbefore ですが、受け入れられる答えは毎回単にApplication.MacroOptionsVBA6 )( VBA7 )が、この情報は実際にはツールチップとして表示されないため、問題を解決できません。

目標

すべての手段(VBA、VSTO、またはCOMアドイン)でカスタム関数を定義し、ユーザーに関数とそのパラメーターのポップアップ/ツールチップの説明の利点を提供できるようにしたいインラインまたは数式バーのいずれかの組み込みExcel関数ごとに表示されます。

enter image description here

enter image description here

このニーズに対する広く受け入れられている答えは、カスタム関数は不可能だということですが、私はその信念に挑戦したいと思います。

問題

現在、私が見た中で最高ののは、関数を定義することです(多くの場合、上記のMacroOptions呼び出しを使用)。関数ダイアログ(式バーのfxボタン)を表示するときに、関数とパラメーターの説明が以下のように表示されます。

enter image description here

ご覧のとおり、これは多くのパラメーターを持つ複雑な関数です。ユーザーがこの「関数の引数」ダイアログとその起動方法を知らず、代わりにExcelの標準ツールチップのみに精通している場合、数式名のみが表示され、追加のヘルプは表示されません。

enter image description here

これにより、必要なパラメータを正しく提供する機会がなくなります。 (ドキュメントを読むことなく、もちろん、ユーザーはこれを行いません。)

これで、パワーユーザーは、 Ctrl+Shift+A、次のような関数パラメーターの自動補完リストが付与されます。

enter image description here

しかし、もちろん、上記と同じ問題があります。つまり、標準のExcelユーザーは最初の画像からデフォルトの動作にしか使用されず、おそらくその機能を学習したことがないということです。

これだけでは十分でない理由がこの時点で明らかになるはずであり、すべての組み込み関数の機能、つまりユーザーに関数の使用方法を伝えるインラインツールチップが必要です。

いじめ

最初は、ネイティブのExcelアプリケーション機能を除いて、これは単に不可能だと確信していたかもしれません。アドインとVBAは拡張機能であり、このツールチップは単に拡張できない場合があります。しかし、その理論は、Analysis Toolpakアドインの存在によって挑戦されています。もちろん、Microsoftで構築されていますが、ANALYS32.xllは、VB、C、C++、およびC#で生成できるものと同様のスタンドアロンXLLアドインです。案の定、このXLLがアプリケーションに読み込まれると、利用可能な 関数 にはネイティブのExcel関数と同じツールチップがあります:

enter image description here

確かに、この情報が何らかの形でこのXLLファイルにエンコードされてExcelに渡される場合、独自のアドインで複製する方法はありますか?分析ツールパックで行われていることをリバースエンジニアリングできるかどうかを確認するために、逆コンパイルについて少し学び始めます。

あなたが助けることができる方法

この問題に関して公開されている情報をすべて調査したことはほぼ確実です。誰かがこれを助けるかもしれない私が知らない何かを知っているなら、気軽に声を掛けてください。それがカスタム関数定義で何が起こっているのかを考え出すと、私は非常に義務付けられます。それ以外の場合は、すべての行き止まりにぶつかり、見つけたものを報告するまで、自分で掘り続けます。

99
Alain

GitHubに概念実証プロジェクトを Excel-DNA IntelliSense プロジェクトとして投稿し、これを実装しています。

UIオートメーションクラスを使用して適切なExcelユーザーインターフェイスイベントを監視すると、適切なときにフォームが表示されます。

コードは Excel-DNA アドインとしてラップされ、Excel 2013/Windows 8マシンで動作します。他の1つの構成(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;
}

関数の説明を両方取得します

Function Description

関数を選択すると、引数のヘルプが表示されます

Argument Help

それはいいように見えますが、それはまだ非常に不安定で、私のマシンでのみ動作し、時にはExcelをクラッシュさせます。それは始まりかもしれませんが...


2014年5月9日更新:

古いバージョンのExcelおよびWindowsで引数のヘルプを機能させる方法を見つけ出し、いくつかの進歩を遂げました。ただし、すべてを信頼できるものにするためには、かなり多くの作業が必要です。これを支援したい人は誰でも直接私に連絡してください。


2016年6月18日更新:

Excel-DNAアドインとVBA関数の両方に対するExcel UDF IntelliSenseのサポートは現在テスト中です。手順については、GitHubの Getting Started ページを参照してください。

39
Govert

どう?

  1. セルのキー押下イベントでテキスト入力をキャプチャします。 このように
  2. テキストがカスタム関数と一致するかどうかを確認します。
  3. 一致する場合は、ツールチップのふりをするラベルや形状などを表示します。 このように

これは受け入れられますか?

少しいですが、簡単です。

1
Clxy

XLLとは何ですか?

XLLはDLLで、ExcelまたはExcelアドインマネージャーによって呼び出されるいくつかのプロシージャをエクスポートします。 http://msdn.Microsoft.com/en-us/library /office/bb687861.aspx

XLLの開発方法は?

Excel XLL SDKとVisual C++(またはDLLをコンパイルしてSDKプロシージャを呼び出すことができるもの))

簡単なXLLを作成するためのクイックガイドはどこにありますか?

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

ツールチップの入手方法

  1. 関数をプロシージャとして実装し、エクスポートします
  2. プロシージャxlAutoOpen(void)の実装とエクスポート- 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

悲しいことに、分析ツールアドインにもツールチップがありません。

私の解決策は間違っていましたが、元のポスターから間違った情報が投稿されました。 link がBINOMDISTで画像を表示すると、これがANALYS32.xllの関数ではないことが明確に示されます。

これは不可能な質問を解決しようとしていたことを意味します。ポスターが要求したことを実行できるXLLがないためです。 XLLのツールチップを表示するバージョンのExcelを見つけた場合は、お知らせください。

ポスターがXLLの振る舞いを真似ようとして、何を求めたかについて、ANALYS32.xllが何をするかに関して私の答えが最も正しいと確信しています。

0