12

Visual Studio には、Excel 2010 アドイン プロジェクトがあります。そのプロジェクトで次のモジュールを作成するにはどうすればよいですか。

ここに画像の説明を入力

そのワークブックをそのモジュールで保存して、アドインで使用できることはわかっています。アドインでそのモジュールを作成できると便利です...

4

4 に答える 4

10

モジュールの作成が可能です。ただし、これを機能させるには、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);
于 2012-12-22T02:00:15.750 に答える
3

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

于 2012-12-21T19:19:11.537 に答える
2

本当にやりたいことが .NET UDF を作成すること、または .NET アプリケーション レベル コマンドと UDF アドインを組み合わせて作成することである場合、VSTO を使用することは現時点では適切な解決策ではありません。Addin Express (有料) またはExcel DNA (無料)
を使用することをお勧めします。 )。これらの両方を使用すると、.NET XLL UDF アドインと Automation UDF アドインの両方を作成できます (XLL UDF アドインはパフォーマンス上の大きな利点を提供しますが、Excel オブジェクト モデルへのアクセスは若干制限されます)。

于 2012-12-27T17:18:26.687 に答える
1

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;
    }
}
于 2012-12-22T21:40:15.940 に答える