Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här genomgången visar hur du anropar en metod i en anpassning på dokumentnivå för Microsoft Office Excel från VBA-kod (Visual Basic for Applications) i arbetsboken. Proceduren omfattar tre grundläggande steg: lägga till en metod i Sheet1 klassen värdobjekt, exponera metoden för VBA-kod i arbetsboken och anropa sedan metoden från VBA-koden i arbetsboken.
Gäller för: Informationen i det här avsnittet gäller för projekt på dokumentnivå för Excel och Word. 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 även för projekt på dokumentnivå för Word.
I den här genomgången tas följande aktiviteter upp:
Skapa en arbetsbok som innehåller VBA-kod.
Ange platsen för arbetsboken som betrodd plats med hjälp av Betrodd plats i Excel.
Lägga till en metod i värdobjektklassen
Sheet1.Extrahera ett gränssnitt för värdobjektklassen
Sheet1.Exponera metoden till VBA-kod.
Anropa metoden 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 Visual Studio IDE.
Förutsättningar
Du behöver följande komponenter för att slutföra den här genomgången:
En utgåva av Visual Studio som innehåller Utvecklarverktyg för Microsoft Office. Mer information finns i Konfigurera en dator för att utveckla Office-lösningar.
Microsoft Excel
Skapa en arbetsbok som innehåller VBA-kod
Det första steget är att skapa en makroaktiverad arbetsbok som innehåller ett enkelt VBA-makro. Innan du kan exponera kod i en anpassning till VBA måste arbetsboken redan innehålla VBA-kod. Annars kan Visual Studio inte ändra VBA-projektet för att aktivera VBA-kod för att anropa anpassningssammansättningen.
Om du redan har en arbetsbok som innehåller VBA-kod som du vill använda kan du hoppa över det här steget.
Skapa en arbetsbok som innehåller VBA-kod
Starta Excel.
Spara det aktiva dokumentet som en Excel Macro-Enabled-arbetsbok (*.xlsm) med namnet WorkbookWithVBA. Spara den på en lämplig plats, till exempel skrivbordet.
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.
I gruppen Kod klickar du på Visual Basic.
Visual Basic-redigeraren öppnas.
Dubbelklicka på ThisWorkbook i projektfönstret.
Kodfilen för
ThisWorkbookobjektet öppnas.Lägg till följande VBA-kod i kodfilen. Den här koden definierar en enkel funktion som inte gör någonting. Det enda syftet med den här funktionen är att säkerställa att ett VBA-projekt finns i arbetsboken. Detta krävs för senare steg i den här genomgången.
Sub EmptySub() End SubSpara dokumentet och avsluta Excel.
Skapa projektet
Nu kan du skapa ett projekt på dokumentnivå för Excel som använder den makroaktiverade arbetsboken som du skapade tidigare.
Skapa ett nytt projekt
Starta Visual Studio.
Peka på Nytt på Arkiv-menyn och klicka sedan på Projekt.
I fönstret Mallar expanderar du Visual C#och expanderar sedan Office/SharePoint.
Välj noden Office-tillägg .
I listan över projektmallar väljer du Excel 2010-arbetsboken eller Excel 2013-arbetsboksprojektet .
I rutan Namn skriver du CallingCodeFromVBA.
Klicka på OK.
Visual Studio Tools for Office-projektguiden öppnas.
Välj Kopiera ett befintligt dokument och ange platsen för arbetsbokenWithVBA som du skapade tidigare i rutan Fullständig sökväg till det befintliga dokumentet. Om du använder en egen makroaktiverad arbetsbok anger du arbetsbokens plats i stället.
Klicka på Finish.
Visual Studio öppnar arbetsboken WorkbookWithVBA i designern och lägger till CallingCodeFromVBA-projektet i Solution Explorer.
Lita på arbetsbokens plats
Innan du kan exponera kod i lösningen för VBA-kod i arbetsboken måste du tillåta att VBA i arbetsboken körs. Det finns flera sätt att göra detta på. I den här genomgången utför du den här uppgiften genom att lita på arbetsbokens plats i Säkerhetscenter i Excel.
Att lita på arbetsbokens plats
Starta Excel.
Klicka på fliken Arkiv .
Klicka på knappen Excel-alternativ .
I fönstret Kategorier klickar du på Säkerhetscenter.
I informationsfönstret klickar du på Inställningar för säkerhetscenter.
I kategorifönstret klickar du på Betrodda platser.
I informationsfönstret klickar du på Lägg till ny plats.
I dialogrutan Betrodd plats för Microsoft Office bläddrar du till mappen som innehåller CallingCodeFromVBA-projektet .
Välj Undermappar på den här platsen är också betrodda.
I dialogrutan Betrodd plats för Microsoft Office klickar du på OK.
I dialogrutan Säkerhetscenter klickar du på OK.
I dialogrutan Excel-alternativ klickar du på OK.
Avsluta Excel.
Lägga till en metod i klassen Sheet1
Nu när VBA-projektet har konfigurerats lägger du till en offentlig metod i den Sheet1 värdobjektklass som du kan anropa från VBA-kod.
Så här lägger du till en metod i klassen Sheet1
Högerklicka på Sheet1.cs i Solution Explorer och klicka sedan på Visa kod.
Filen Sheet1.cs öppnas i kodredigeraren.
Lägg till följande kod i
Sheet1klassen. MetodenCreateVstoNamedRangeskapar ett nytt NamedRange objekt i det angivna intervallet. Den här metoden skapar också en händelsehanterare för Selected händelsen för NamedRange. Senare i den här genomgången kommer du att anropa metodenCreateVstoNamedRangefrån VBA-koden i dokumentet.private Microsoft.Office.Tools.Excel.NamedRange namedRange1; public void CreateVstoNamedRange(Excel.Range range, string name) { if (!this.Controls.Contains(name)) { namedRange1 = this.Controls.AddNamedRange(range, name); namedRange1.Selected += new Excel.DocEvents_SelectionChangeEventHandler( namedRange1_Selected); } else { MessageBox.Show("A named range with this specific name " + "already exists on the worksheet."); } } private void namedRange1_Selected(Microsoft.Office.Interop.Excel.Range Target) { MessageBox.Show("This named range was created by Visual Studio " + "Tools for Office."); }Lägg till följande metod i
Sheet1klassen. Den här metoden åsidosätter GetAutomationObject metoden för att returnera den aktuella instansenSheet1av klassen.protected override object GetAutomationObject() { return this; }Använd följande attribut före den första raden i klassdeklarationen
Sheet1. Dessa attribut gör klassen synlig för COM, men utan att generera ett klassgränssnitt.[System.Runtime.InteropServices.ComVisible(true)] [System.Runtime.InteropServices.ClassInterface( System.Runtime.InteropServices.ClassInterfaceType.None)]
Extrahera ett gränssnitt för klassen Sheet1
Innan du kan exponera CreateVstoNamedRange metoden för VBA-kod måste du skapa ett offentligt gränssnitt som definierar den här metoden, och du måste exponera det här gränssnittet för COM.
Extrahera ett gränssnitt för klassen Sheet1
I kodfilen Sheet1.cs klickar du var som helst i
Sheet1klassen.På Refaktormenyn klickar du på Extrahera gränssnitt.
I dialogrutan Extrahera gränssnitt i rutan Välj offentliga medlemmar för att bilda gränssnitt klickar du på posten för
CreateVstoNamedRangemetoden.Klicka på OK.
Visual Studio genererar ett nytt gränssnitt med namnet
ISheet1och ändrar definitionen avSheet1klassen så att den implementerarISheet1gränssnittet. Visual Studio öppnar också filen ISheet1.cs i kodredigeraren.I filen ISheet1.cs ersätter du gränssnittsdeklarationen
ISheet1med följande kod. Den här koden görISheet1gränssnittet offentligt och använder ComVisibleAttribute attributet för att göra gränssnittet synligt för COM.[System.Runtime.InteropServices.ComVisible(true)] public interface ISheet1 { void CreateVstoNamedRange(Microsoft.Office.Interop.Excel.Range range, string name); }Skapa projektet.
Exponera metoden för VBA-kod
Om du vill exponera CreateVstoNamedRange metoden för VBA-kod i arbetsboken anger du egenskapen ReferenceAssemblyFromVbaProject för Sheet1 värdobjektet till Sant.
Så här exponerar du metoden för VBA-kod
Dubbelklicka på Sheet1.cs i Solution Explorer.
Filen WorkbookWithVBA öppnas i designern med Sheet1 synligt.
I fönstret Egenskaper väljer du egenskapen ReferenceAssemblyFromVbaProject och ändrar värdet till Sant.
Klicka på OK i meddelandet som visas.
Skapa projektet.
Anropa metoden från VBA-kod
Nu kan du anropa CreateVstoNamedRange metoden från VBA-koden i arbetsboken.
Anmärkning
I den här genomgången lägger du till VBA-kod i arbetsboken när du felsöker projektet. VBA-koden som du lägger till i det här dokumentet skrivs över nästa gång du skapar projektet, eftersom Visual Studio ersätter dokumentet i utdatamappen för bygget med en kopia av dokumentet från huvudprojektmappen. Om du vill spara VBA-koden kan du kopiera den till dokumentet i projektmappen. Mer information finns i Kombinera VBA- och dokumentnivåanpassningar.
Anropa metoden från VBA-kod
Tryck på F5 för att köra projektet.
Klicka på Visual Basic i gruppen Kod på fliken Utvecklare.
Visual Basic-redigeraren öppnas.
På menyn Infoga klickar du på Modul.
Lägg till följande kod i den nya modulen.
Den här koden anropar
CreateTablemetoden i anpassningssammansättningen. Makrot använder den här metoden med hjälp av den globalaGetManagedClassmetoden för att komma åt denSheet1värdobjektklass som du exponerade för VBA-kod. MetodenGetManagedClassgenererades automatiskt när du angav egenskapen ReferenceAssemblyFromVbaProject tidigare i den här genomgången.Sub CallVSTOMethod() Dim VSTOSheet1 As CallingCodeFromVBA.Sheet1 Set VSTOSheet1 = GetManagedClass(Sheet1) Call VSTOSheet1.CreateVstoNamedRange(Sheet1.Range("A1"), "VstoNamedRange") End SubTryck på F5.
I den öppna arbetsboken klickar du på cell A1 på Blad1. Kontrollera att meddelanderutan visas.
Avsluta Excel utan att spara ändringarna.
Nästa steg
Du kan lära dig mer om att anropa kod i Office-lösningar från VBA i följande avsnitt:
Anropa kod i ett värdobjekt i en Visual Basic-anpassning från VBA. Den här processen skiljer sig från Visual C#-processen. Mer information finns i Genomgång: Anropa kod från VBA i ett Visual Basic-projekt.
Anropa kod i ett VSTO-tillägg från VBA. Mer information finns i Handledning: Anropa kod i ett VSTO-tillägg från VBA.