Dela via


Genomgång: Anropa kod i ett VSTO-tillägg från VBA

Den här genomgången visar hur du exponerar ett objekt i ett VSTO-tillägg till andra Microsoft Office-lösningar, inklusive Visual Basic for Applications (VBA) och COM VSTO-tillägg.

Gäller för: Informationen i det här avsnittet gäller för VSTO-tilläggsprojekt. Mer information finns i Funktioner som är tillgängliga efter Office-program och projekttyp.

Även om den här genomgången använder Excel specifikt gäller de begrepp som visas i genomgången för alla VSTO-tilläggsprojektmallar som tillhandahålls av Visual Studio.

I den här genomgången tas följande aktiviteter upp:

  • Definiera en klass som kan exponeras för andra Office-lösningar.

  • Exponera klassen för andra Office-lösningar.

  • Anropa en metod för klassen från VBA-kod.

    Anmärkning

    Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassa IDE.

Förutsättningar

Du behöver följande komponenter för att slutföra den här genomgången:

Skapa VSTO-tilläggsprojektet

Det första steget är att skapa ett VSTO-tilläggsprojekt för Excel.

Skapa ett nytt projekt

  1. Skapa ett Excel VSTO-tilläggsprojekt med namnet ExcelImportData med hjälp av Excel VSTO-tilläggsprojektmallen. Mer information finns i Så här skapar du Office-projekt i Visual Studio.

    Visual Studio öppnar kodfilen ThisAddIn.cs eller ThisAddIn.vb och lägger till ExcelImportData-projektet i Solution Explorer.

Definiera en klass som du kan exponera för andra Office-lösningar

Syftet med den här genomgången är att anropa ImportData-metoden i en klass med namnet AddInUtilities i ditt VSTO-tillägg från VBA-kod. Den här metoden skriver en sträng i cell A1 i det aktiva kalkylbladet.

Om du vill exponera AddInUtilities klassen för andra Office-lösningar måste du göra klassen offentlig och synlig för COM. Du måste också exponera IDispatch-gränssnittet i klassen. Koden i följande procedur visar ett sätt att uppfylla dessa krav. För mer information, se Anrop av kod i VSTO-tillägg från andra Office-lösningar.

Definiera en klass som du kan exponera för andra Office-lösningar

  1. Klicka på Lägg till klassProjekt-menyn.

  2. I dialogrutan Lägg till nytt objekt ändrar du namnet på den nya klassen till AddInUtilities och klickar på Lägg till.

    Filen AddInUtilities.cs eller AddInUtilities.vb öppnas i kodredigeraren.

  3. Lägg till följande direktiv överst i filen.

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. AddInUtilities Ersätt klassen med följande kod.

    [ComVisible(true)]
    public interface IAddInUtilities
    {
        void ImportData();
    }
    
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.None)]
    public class AddInUtilities : IAddInUtilities
    {
        // This method tries to write a string to cell A1 in the active worksheet.
        public void ImportData()
        {
            Excel.Worksheet activeWorksheet = Globals.ThisAddIn.Application.ActiveSheet as Excel.Worksheet;
    
            if (activeWorksheet != null)
            {
                Excel.Range range1 = activeWorksheet.get_Range("A1", System.Type.Missing);
                range1.Value2 = "This is my data";
            }
        }
    }
    

    Den här koden gör AddInUtilities klassen synlig för COM och lägger till ImportData metoden i klassen. För att exponera IDispatch-gränssnittetAddInUtilities har ClassInterfaceAttribute klassen även attributet och implementerar ett gränssnitt som är synligt för COM.

Exponera klassen för andra Office-lösningar

Om du vill exponera AddInUtilities klassen för andra Office-lösningar åsidosätter du RequestComAddInAutomationService metoden i ThisAddIn klassen. I din åsidosättning returnerar du en instans av AddInUtilities-klassen.

Så här exponerar du klassen AddInUtilities för andra Office-lösningar

  1. Expandera Excel i Solution Explorer.

  2. Högerklicka på ThisAddIn.cs eller ThisAddIn.vb och klicka sedan på Visa kod.

  3. Lägg till följande kod i ThisAddIn klassen.

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. På menyn Skapa klickar du på Skapa lösning.

    Kontrollera att lösningen skapas utan fel.

Testa VSTO-tillägget

Du kan anropa klassen AddInUtilities från flera olika typer av Office-lösningar. I den här genomgången använder du VBA-kod i en Excel-arbetsbok. För mer information om andra typer av Office-lösningar som du också kan använda, se Anropa kod i VSTO-tillägg från andra Office-lösningar.

Testa ditt VSTO-tillägg

  1. Tryck på F5 för att köra projektet.

  2. Spara den aktiva arbetsboken i Excel som en Excel-Macro-Enabled-arbetsbok (*.xlsm). Spara den på en lämplig plats, till exempel skrivbordet.

  3. Klicka på fliken Utvecklare i menyfliksområdet.

    Anmärkning

    Om fliken Utvecklare inte visas måste du först visa den. Mer information finns i Så här: Visa fliken Utvecklare i menyfliksområdet.

  4. I gruppen Kod klickar du på Visual Basic.

    Visual Basic-redigeraren öppnas.

  5. Dubbelklicka på ThisWorkbook i projektfönstret.

    Kodfilen för ThisWorkbook objektet öppnas.

  6. Lägg till följande VBA-kod i kodfilen. Den här koden hämtar först ett COMAddIn-objekt som representerar VSTO-tillägget ExcelImportData . Sedan använder koden egenskapen Object för COMAddIn-objektet för att anropa ImportData metoden.

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Tryck på F5.

  8. Kontrollera att ett nytt importerat datablad har lagts till i arbetsboken. Kontrollera också att cell A1 innehåller strängen Detta är mina data.

  9. Avsluta Excel.

Nästa steg

Du kan lära dig mer om att programmera VSTO-tillägg från följande ämnen: