Visual Studio には、Excel 2010 アドイン プロジェクトがあります。そのプロジェクトで次のモジュールを作成するにはどうすればよいですか。
そのワークブックをそのモジュールで保存して、アドインで使用できることはわかっています。アドインでそのモジュールを作成できると便利です...
Visual Studio には、Excel 2010 アドイン プロジェクトがあります。そのプロジェクトで次のモジュールを作成するにはどうすればよいですか。
そのワークブックをそのモジュールで保存して、アドインで使用できることはわかっています。アドインでそのモジュールを作成できると便利です...
モジュールの作成が可能です。ただし、これを機能させるには、Excel で [VB プロジェクト モデルへのアクセスを信頼する] 設定を選択する必要があります。信頼設定が選択されていない場合、アクセスが拒否されるというエラーがスローされます。
using Excel = Microsoft.Office.Interop.Excel;
using VB = Microsoft.Vbe.Interop;
Excel.Application eApp = new Excel.Application();
eApp.Visible = true;
Excel.Workbook eBook = eApp.Workbooks.Add();
VB.VBProject eVBProj = (VB.VBProject)eBook.VBProject;
VB._VBComponent vbModule = eVBProj.VBE.ActiveVBProject.VBComponents.Add(VB.vbext_ComponentType.vbext_ct_StdModule);
String functionText = "Function MyTest()\n";
functionText += "MsgBox \"Hello World\"\n";
functionText += "End Function";
vbModule.CodeModule.AddFromString(functionText);
VSTO が Excel UDF をサポートしているとは思いません。一般的な推奨事項は、Automation Add-in を使用することです (Sid のリンクが示唆するように)。
もう 1 つのオプションは、VBA からマネージ VSTO 関数を呼び出すことです。繰り返しますが、これは推奨されませんが可能です。
(リンクからのチュートリアルの要約) VBA からマネージ関数を呼び出す簡単な方法を次に示します。
VSTO で関数を使用してクラスを作成する
<System.Runtime.InteropServices.ComVisible(True)> _
Public Class MyManagedFunctions
Public Function GetNumber() As Integer
Return 42
End Function
End Class
VSTO でクラスを VBA に結び付ける
Private Sub ThisWorkbook_Open() Handles Me.Open
Me.Application.Run("RegisterCallback", New MyManagedFunctions)
End Sub
VBA でマネージ コードのフックと関数のラッパーを作成する
スプレッドシートまたはドキュメントの VBA モジュール内
Dim managedObject As Object
Public Sub RegisterCallback(callback As Object)
Set managedObject = callback
End Sub
Public Function GetNumberFromVSTO() As Integer
GetNumberFromVSTO = managedObject.GetNumber()
End Function
これで、セルに =GetNumberFromVSTO() を入力できます。Excel の起動時に、セルの値は 42 になるはずです。
http://blogs.msdn.com/b/pstubbs/archive/2004/12/31/344964.aspx
本当にやりたいことが .NET UDF を作成すること、または .NET アプリケーション レベル コマンドと UDF アドインを組み合わせて作成することである場合、VSTO を使用することは現時点では適切な解決策ではありません。Addin Express (有料) またはExcel DNA (無料)
を使用することをお勧めします。 )。これらの両方を使用すると、.NET XLL UDF アドインと Automation UDF アドインの両方を作成できます (XLL UDF アドインはパフォーマンス上の大きな利点を提供しますが、Excel オブジェクト モデルへのアクセスは若干制限されます)。
VSTOアドインはUDFを作成できないため、関数用に別のアドインを作成する必要があります。このアドインはVSTOアドインと同じDLLに含めることができますが、特別なトリックがなければ、VSTOとUDFの間で通信することはできません。
これについてのブログ投稿があります。VSTOとUDFを含む完全なサンプルプロジェクトを提供します。
これがUDF自体の基本構造です。
[Guid("3B81B6B7-3AF9-454F-AADF-FAF06E5A98F2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface IFunctions
{
int MYINT();
}
[Guid("F58C591D-A22F-49AD-BC21-A086097DC26B")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class Functions : IFunctions
{
public int MYINT()
{
return 42;
}
}