Udostępnij za pośrednictwem


Wskazówki: wywoływanie kodu w dodatkach na poziomie aplikacji z VBA

W tym instruktażu przedstawiono sposób wystawiać obiektu w poziomie aplikacji dodatek do innych rozwiązań Microsoft Office, w tym Visual Basic dla aplikacji (VBA) i dodatki COM.

Zastosowanie: Informacje przedstawione w tym temacie mają zastosowanie do projektów na poziomie aplikacji obsługiwanych w pakietach Microsoft Office 2013 i Microsoft Office 2010. Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.

Chociaż w tym instruktażu specjalnie używa programu Excel, pojęcia świadczy instruktażu są stosowane do dowolnego szablonu — w projekcie dostarczonym przez Visual Studio.

W tym instruktażu przedstawiono następujące zadania:

  • Definiowanie klasy, która może być narażony na inne rozwiązania pakietu Office.

  • Wystawiając klasy do innych rozwiązań pakietu Office.

  • Wywołanie 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 Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Wymagania wstępne

Potrzebne do przeprowadzenia tego instruktażu następujące składniki:

łącze do wideo Wideo wersję tego tematu, zobacz wideo jak: wywołanie kodu w poziomie aplikacji dodatek z VBA.

Tworzenie projektu w

Pierwszym krokiem jest utworzenie projektu w dla programu Excel.

Aby utworzyć nowy projekt

  • Tworzenie projektu w programie Excel o nazwie ExcelImportData, przy użyciu szablonu projektu-w programie Excel.Aby uzyskać więcej informacji, zobacz Porady: tworzenie projektów Office w Visual Studio.

    Visual StudioOtwiera ThisAddIn.cs lub ThisAddIn.vb kod pliku i dodaje ExcelImportData projekt Solution Explorer.

Definiowanie klasy, które mogą narażać innych rozwiązań pakietu Office

Celem tego instruktażu jest do ImportData metody klasy o nazwie AddInUtilities w dodatku z kodu VBA.Ta metoda zapisuje ciąg w komórce A1 aktywnego arkusza.

Aby odsłonić AddInUtilities klasy do innych rozwiązań pakietu Office, należy klasa publicznych i niewidoczny dla modelu COM.Należy również udostępnić interfejsu IDispatch interface w klasie.Kod w poniższej procedurze pokazano jeden ze sposobów spełnić te wymagania.Aby uzyskać więcej informacji, zobacz Wywoływanie kodu w dodatkach na poziomie aplikacji z innych rozwiązań pakietu Office.

Do zdefiniowania klasy, która może narazić na inne rozwiązania pakietu Office

  1. Na Projekt menu, kliknij przycisk Dodać klasy.

  2. W Dodaj nowy element okno dialogowe pole, Zmień nazwę nowej klasy do AddInUtilitiesi kliknij przycisk Dodaj.

    AddInUtilities.cs lub AddInUtilities.vb plik zostanie otwarty w edytorze kodu.

  3. Dodaj następujące instrukcje do początku pliku.

    Imports System.Data
    Imports System.Runtime.InteropServices
    Imports Excel = Microsoft.Office.Interop.Excel
    
    using System.Data;
    using System.Runtime.InteropServices;
    using Excel = Microsoft.Office.Interop.Excel;
    
  4. Zamień AddInUtilities klasy następujący kod.

    <ComVisible(True)> _
    Public Interface IAddInUtilities
        Sub ImportData()
    End Interface
    
    <ComVisible(True)> _
    <ClassInterface(ClassInterfaceType.None)> _
    Public Class AddInUtilities
        Implements IAddInUtilities
    
        ' This method tries to write a string to cell A1 in the active worksheet. 
        Public Sub ImportData() Implements IAddInUtilities.ImportData
    
            Dim activeWorksheet As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveSheet
    
            If activeWorksheet IsNot Nothing Then 
                Dim range1 As Excel.Range = activeWorksheet.Range("A1")
                range1.Value2 = "This is my data" 
            End If 
        End Sub 
    End Class
    
    [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";
            }
        }
    }
    

    Sprawia, że ten kod AddInUtilities klasy widocznych na modelu COM i dodaje ImportData metoda w klasie.Aby odsłonić interfejsu IDispatch interfejs, AddInUtilities klasy ma również ClassInterfaceAttribute atrybut który implementuje interfejs, który jest niewidoczny dla modelu COM.

Wystawiając klasy do innych rozwiązań pakietu Office

Aby odsłonić AddInUtilities klasy do innych rozwiązań pakietu Office, zastąpić RequestComAddInAutomationService metoda w ThisAddIn klasy.W poszczególnych, zwracają wystąpienie AddInUtilities klasy.

Aby odsłonić klasy AddInUtilities do innych rozwiązań pakietu Office

  1. W Solution Explorer, rozwiń węzeł Excel.

  2. Kliknij prawym przyciskiem myszy ThisAddIn.cs lub ThisAddIn.vb, a następnie kliknij przycisk Widok Kod.

  3. Dodaj następujący kod do ThisAddIn klasy.

    Private utilities As AddInUtilities
    
    Protected Overrides Function RequestComAddInAutomationService() As Object 
        If utilities Is Nothing Then
            utilities = New AddInUtilities()
        End If 
        Return utilities
    End Function
    
    private AddInUtilities utilities;
    
    protected override object RequestComAddInAutomationService()
    {
        if (utilities == null)
            utilities = new AddInUtilities();
    
        return utilities;
    }
    
  4. Na budować menu, kliknij przycisk Budowania rozwiązania.

    Zweryfikuj, że rozwiązanie opiera się bez błędów.

Badania-dodatek

Możesz zadzwonić do AddInUtilities klasy z kilku różnych typów rozwiązań pakietu Office.W tym instruktażu będą używać kodu VBA w skoroszycie programu Excel.Aby uzyskać więcej informacji na temat innych rodzajów rozwiązań pakietu Office można również użyć, zobacz Wywoływanie kodu w dodatkach na poziomie aplikacji z innych rozwiązań pakietu Office.

Aby przetestować dodatek

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

  2. W programie Excel należy zapisać aktywny skoroszyt jako skoroszyt programu zostaną (*.xlsm).Zapisać go w dogodnej lokalizacji, takiej jak pulpit.

  3. Kliknij na Wstążce, autora kartę.

    [!UWAGA]

    Jeśli autora karta nie jest widoczna, najpierw należy wyświetlić.Aby uzyskać więcej informacji, zobacz Porady: pokazywanie karty dewelopera na wstążce.

  4. W Kod grupy, kliknij przycisk programu Visual Basic.

    Otwiera edytor Visual Basic.

  5. W Projekt okno, kliknij dwukrotnie ThisWorkbook.

    Plik kodu dla ThisWorkbook otwiera obiekt.

  6. Dodaj następujący kod VBA w pliku kodu.Ten kod najpierw pobiera COMAddIn obiekt, który reprezentuje ExcelImportData dodatek.Następnie kod używa Object właściwość COMAddIn obiektu, aby zadzwonić do ImportData metoda.

    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 Zaimportowanych danych został dodany arkusz w skoroszycie.Sprawdź także, że komórka A1 zawiera ciąg to Moje dane.

  9. Zakończ pracę programu Excel.

Następne kroki

Można poznać więcej informacji na temat programowania dodatki z tych tematów:

Zobacz też

Zadania

Porady: tworzenie projektów Office w Visual Studio

Koncepcje

Wywoływanie kodu w dodatkach na poziomie aplikacji z innych rozwiązań pakietu Office

Architektura dodatków na poziomie aplikacji

Dostosowywanie funkcji interfejsu użytkownika korzystając z rozszerzalności interfejsów

Inne zasoby

Programowanie dodatków na poziomie aplikacji

Tworzenie rozwiązań pakietu Office