Udostępnij za pośrednictwem


Przewodnik: wywoływanie kodu w dodatku VSTO z języka VBA

W tym przewodniku pokazano, jak uwidocznić obiekt w dodatku VSTO do innych rozwiązań pakietu Microsoft Office, w tym Visual Basic for Applications (VBA) i dodatków COM VSTO.

Dotyczy: informacje w tym temacie dotyczą projektów dodatków VSTO. Aby uzyskać więcej informacji, zobacz Funkcje dostępne przez aplikacja pakietu Office lication i typ projektu.

Mimo że ten przewodnik używa programu Excel specjalnie, koncepcje przedstawione w przewodniku mają zastosowanie do dowolnego szablonu projektu dodatku VSTO dostarczonego przez program Visual Studio.

W instruktażu przedstawiono następujące zagadnienia:

  • Definiowanie klasy, która może być widoczna dla innych rozwiązań pakietu Office.

  • Udostępnianie klasy innym rozwiązaniom pakietu Office.

  • Wywoływanie metody klasy z kodu VBA.

    Uwaga

    Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.

Wymagania wstępne

Następujące składniki są wymagane do przeprowadzenia tego instruktażu:

Tworzenie projektu dodatku VSTO

Pierwszym krokiem jest utworzenie projektu dodatku VSTO dla programu Excel.

Aby utworzyć nowy projekt

  1. Utwórz projekt dodatku VSTO programu Excel o nazwie ExcelImportData przy użyciu szablonu projektu dodatku VSTO programu Excel. Aby uzyskać więcej informacji, zobacz How to: Create Office Projects in Visual Studio (Jak tworzyć projekty pakietu Office w programie Visual Studio).

    Program Visual Studio otwiera plik kodu ThisAddIn.cs lub ThisAddIn.vb i dodaje projekt ExcelImportData do Eksplorator rozwiązań.

Definiowanie klasy, którą można uwidocznić w innych rozwiązaniach pakietu Office

Celem tego przewodnika jest wywołanie ImportData metody klasy o nazwie AddInUtilities w dodatku VSTO z kodu VBA. Ta metoda zapisuje ciąg w komórce A1 aktywnego arkusza.

Aby udostępnić klasę AddInUtilities innym rozwiązaniom pakietu Office, należy udostępnić klasę jako publiczną i widoczną dla modelu COM. Należy również uwidocznić interfejs IDispatch w klasie . Kod w poniższej procedurze przedstawia jeden ze sposobów spełnienia tych wymagań. Aby uzyskać więcej informacji, zobacz Wywoływanie kodu w dodatku VSTO z innych rozwiązań pakietu Office.

Aby zdefiniować klasę, którą można uwidocznić w innych rozwiązaniach pakietu Office

  1. W menu Project (Projekt) kliknij pozycję Add Class (Dodaj klasę).

  2. W oknie dialogowym Dodawanie nowego elementu zmień nazwę nowej klasy na AddInUtilities, a następnie kliknij przycisk Dodaj.

    Plik AddInUtilities.cs lub AddInUtilities.vb zostanie otwarty w Edytorze kodu.

  3. Dodaj następujące dyrektywy na początku pliku.

    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Zastąp klasę AddInUtilities następującym kodem.

    [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";
            }
        }
    }
    

    Ten kod sprawia, że klasa jest AddInUtilities widoczna dla modelu COM i dodaje metodę ImportData do klasy. Aby uwidocznić interfejs IDispatch , AddInUtilities klasa ma ClassInterfaceAttribute również atrybut i implementuje interfejs widoczny dla modelu COM.

Uwidaczniaj klasę innym rozwiązaniom pakietu Office

Aby uwidocznić klasę AddInUtilities innym rozwiązaniom pakietu Office, przesłoń metodę RequestComAddInAutomationServiceThisAddIn w klasie . W zastąpieniu zwróć wystąpienie AddInUtilities klasy .

Aby uwidocznić klasę AddInUtilities w innych rozwiązaniach pakietu Office

  1. W Eksplorator rozwiązań rozwiń węzeł Excel.

  2. Kliknij prawym przyciskiem myszy thisAddIn.cs lub ThisAddIn.vb, a następnie kliknij polecenie Wyświetl kod.

  3. Dodaj poniższy kod do klasy ThisAddIn.

    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. W menu Kompilacja kliknij pozycję Kompiluj rozwiązanie.

    Sprawdź, czy rozwiązanie jest kompilujące bez błędów.

Testowanie dodatku VSTO

Możesz wywołać klasę AddInUtilities z kilku różnych typów rozwiązań pakietu Office. W tym przewodniku użyjesz kodu VBA w skoroszycie programu Excel. Aby uzyskać więcej informacji na temat innych typów rozwiązań pakietu Office, których można również użyć, zobacz Wywoływanie kodu w dodatku VSTO z innych rozwiązań pakietu Office.

Aby przetestować dodatek VSTO

  1. Naciśnij klawisz F5 , aby uruchomić projekt.

  2. W programie Excel zapisz aktywny skoroszyt jako skoroszyt z obsługą makr programu Excel (*.xlsm). Zapisz go w dogodnej lokalizacji, takiej jak pulpit.

  3. Na wstążce kliknij kartę Deweloper .

    Uwaga

    Jeśli karta Deweloper nie jest widoczna, musisz go najpierw wyświetlić. Aby uzyskać więcej informacji, zobacz Instrukcje: pokazywanie karty dewelopera na wstążce.

  4. W grupie Kod kliknij pozycję Visual Basic.

    Zostanie otwarty Edytor Visual Basic.

  5. W oknie Projekt kliknij dwukrotnie ten elementWorkbook.

    Zostanie otwarty plik kodu dla ThisWorkbook obiektu.

  6. Dodaj następujący kod VBA do pliku kodu. Ten kod najpierw pobiera obiekt COMAddIn reprezentujący dodatek Programu ExcelImportData VSTO. Następnie kod używa właściwości Object obiektu COMAddIn do wywołania ImportData metody .

    Sub CallVSTOMethod()
        Dim addIn As COMAddIn
        Dim automationObject As Object
        Set addIn = Application.COMAddIns("ExcelImportData")
        Set automationObject = addIn.Object
        automationObject.ImportData
    End Sub
    
  7. Naciśnij klawisz F5.

  8. Sprawdź, czy nowy zaimportowany arkusz danych został dodany do skoroszytu. Sprawdź również, czy komórka A1 zawiera ciąg To są moje dane.

  9. Zamknij program Excel.

Następne kroki

Więcej informacji na temat programowania dodatków VSTO można znaleźć w następujących tematach: