Visual Studioには、Excel 2010アドインプロジェクトがあります。私はこのプロジェクトには、以下のモジュールを作成することを持つことができます方法:Visual Studio Excelアドインにユーザー定義関数を追加
を私は私は私のアドオンでそれを使用し、そのモジュールでそのブックを保存することができます知っている私は私のアドインを持つことができればそれは素晴らしいことだろう。そのモジュールを作成してください...
Visual Studioには、Excel 2010アドインプロジェクトがあります。私はこのプロジェクトには、以下のモジュールを作成することを持つことができます方法:Visual Studio Excelアドインにユーザー定義関数を追加
を私は私は私のアドオンでそれを使用し、そのモジュールでそのブックを保存することができます知っている私は私のアドインを持つことができればそれは素晴らしいことだろう。そのモジュールを作成してください...
私は、VSTOがExcel UDFをサポートしているとは思っていませんが、オートメーションアドイン(Sidのリンクの示唆)を使用することをお勧めします。
また、VBAから管理対象のVSTO関数を呼び出すこともできます。もう一度これはお勧めできませんが可能です。
(リンクからチュートリアルの要約) ここでは、VBAからManaged関数を呼び出す簡単な方法があります。
はPrivate Sub ThisWorkbook_Open() Handles Me.Open
Me.Application.Run("RegisterCallback", New MyManagedFunctions)
End Sub
VBAでの機能のためにマネージコード用フックとラッパーを作成
VSTOで<System.Runtime.InteropServices.ComVisible(True)> _
Public Class MyManagedFunctions
Public Function GetNumber() As Integer
Return 42
End Function
End Class
ワイヤーまでにVSTOで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
これは私が今持っているものです。マクロが有効になっているブック(book1.xlsx)を公開せずにプラグインを公開できればいいと思いますので、それは正しいとは思いませんか? –
する必要がありますモジュールを作成することが可能です。ただし、これを行うには、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アドインは、UDFのを作成することはできませんので、あなたは、機能のために別々のアドインを作成する必要があります。このアドインはVSTOアドインと同じDLL内にあることができますが、特殊なトリッキーなしでVSTOとUDFの間で通信することはできません。
私は約blog postです。これは、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;
}
}
あなたが本当にやりたいことは、その後VSTOは現在、良い解決策ではありません使用して.NETのUDF、または組み合わせた.NETアプリケーション・レベルのコマンドおよびUDFアドイン書くことである場合:私はどちらかAddin Express(使用することをお勧めします
を費用)またはExcel DNA(無料)です。
これらの両方を使用すると、.NET XLL UDFアドインとオートメーションUDFアドインの両方を作成できます(XLL UDFアドインは、パフォーマンス上のメリットは大幅に向上しますが、Excelオブジェクトモデルへのアクセスはわずかに制限されます)。
おそらく[this] blogs.msdn.com/b/eric_carter/archive/2004/12/01/writing-user-defined-functions-for-excel-in-net.aspx)が役に立ちます。 –
*** Nooooo!***このパスを下る前に2度考えてください。あなたのコードロジックが次のようにUDFアプローチを使用することを強くお勧めします。a)Excelユーザーがクリティカルロジックを変更して保護する*検出が難しい* b)1つのアドインで、複数のワークブック全体で重複しないc)信頼できる許可d)ユニットtestable e)最新の言語などで書かれている –