次の自動化アドインを作成しました。
namespace AutomationAddin
{
[Guid("6652EC43-B48C-428a-A32A-5F2E89B9F305")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class MyFunctions
{
public MyFunctions()
{
}
#region UDFs
public string ToUpperCase(string input)
{
return input.ToUpper();
}
#endregion
[ComRegisterFunctionAttribute]
public static void RegisterFunction(Type type)
{
Registry.ClassesRoot.CreateSubKey(
GetSubKeyName(type, "Programmable"));
RegistryKey key = Registry.ClassesRoot.OpenSubKey(
GetSubKeyName(type, "InprocServer32"), true);
key.SetValue("",
System.Environment.SystemDirectory + @"\mscoree.dll",
RegistryValueKind.String);
}
[ComUnregisterFunctionAttribute]
public static void UnregisterFunction(Type type)
{
Registry.ClassesRoot.DeleteSubKey(
GetSubKeyName(type, "Programmable"), false);
}
private static string GetSubKeyName(Type type,
string subKeyName)
{
System.Text.StringBuilder s =
new System.Text.StringBuilder();
s.Append(@"CLSID\{");
s.Append(type.GUID.ToString().ToUpper());
s.Append(@"}\");
s.Append(subKeyName);
return s.ToString();
}
}
}
私はそれを構築し、それはうまく登録されます。Excel 2003を開き、[ツール]-> [アドイン]に移動し、自動化ボタンをクリックすると、アドインがリストに表示されます。追加すると、アドインリストに表示されます。ただし、関数自体は表示されません。入力しても機能せず、関数ウィザードを見ると、アドインがカテゴリとして表示されず、関数がリストに含まれていません。
私はWindows7x86でExcel2003を使用しています。Visual Studio 2010でプロジェクトをビルドしました。このアドインは、VisualStudio2008でビルドされたWindowsXPで正常に機能しました。