Udostępnij za pośrednictwem


Jak: narazić kodu VBA w Visual C# projektu

Jeśli chcesz, aby dwa typy kodu do interakcji z innymi, może narazić kodu Visual C# projektu w języku Visual Basic dla kodu Applications (VBA).

Proces Visual C# różni się od procesu języka Visual Basic.Aby uzyskać więcej informacji, zobacz Jak: narazić kodu VBA w projekcie programu Visual Basic.

Dotyczy: Informacje przedstawione w tym temacie dotyczą projektów na poziomie dokumentu dla następujących aplikacji: Excel 2013 i Excel 2010; Word 2013 i Word 2010. Aby uzyskać więcej informacji, zobacz Funkcje dostępne w aplikacji pakietu Office i typ projektu.

Wystawiając kod projektu programu Visual C#

Aby włączyć kod języka VBA w celu wywołania kodu w projekcie programu Visual C#, zmodyfikować kod, tak aby była widoczna dla modelu COM, a następnie ustaw ReferenceAssemblyFromVbaProject właściwość, aby True w projektancie.

Instruktaż, który pokazuje, jak wywołać metodę w projekcie programu Visual C# z języka VBA, zobacz Instruktaż: Wywołanie kodu z języka VBA w Visual C# projektu.

Aby odsłonić kod w projekcie programu Visual C# (VBA)

  1. Otwórz lub Utwórz projekt poziomie dokumentu, który opiera się na dokument programu Word, skoroszyt programu Excel lub szablon programu Excel, który obsługuje makra i już zawiera kod języka VBA.

    Aby uzyskać więcej informacji na temat formatów plików dokumentów, które obsługuje makr, zobacz Łączenie VBA i dostosowania na poziomie dokumentu.

    [!UWAGA]

    Nie można użyć tej funkcji w projekty szablonów programu Word.

  2. Upewnij się, że kod VBA w dokumencie może być uruchamiane bez monitowania użytkownika o włączenie makr.Kod VBA, dodając lokalizację programu Office project do listy Zaufane lokalizacje w ustawienia Centrum zaufania dla programu Word lub Excel można zaufać.

  3. Dodaj element członkowski, który chcesz wystawiać public class w projekcie VBA i ogłosić nowego członka jako public.

  4. Zastosuj następujące ComVisibleAttribute i ClassInterfaceAttribute atrybuty do klasy, który wystawiając VBA.Te atrybuty uwidocznić klasy COM, ale bez generowania interfejsu klasy.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Zastąpić GetAutomationObject metody klasy elementu hosta w projekcie, aby przywrócić wystąpienie klasy, który naraża VBA:

    • Jeśli wyświetlasz klasy elementu host (VBA), należy zastąpić GetAutomationObject metodę, która należy do tej klasy zwraca bieżące wystąpienie klasy.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Jeśli wyświetlasz klasy, która nie jest elementem host (VBA), należy zastąpić GetAutomationObject metoda dowolnego hosta pozycja w projekcie i zwraca instancję klasy zapasu — do hosta.Na przykład, następujący kod zakłada, że naraża klasę o nazwie DocumentUtilities (VBA).

      protected override object GetAutomationObject()
      {
          return new DocumentUtilities();
      }
      

    Aby uzyskać więcej informacji na temat elementów hosta, zobacz Elementy hosta i Omówienie kontroli hosta.

  6. Dodatek interfejs z klasy, który wystawiając VBA.W Dodatek interfejs okno dialogowe Wybierz publiczne elementy członkowskie, które mają zostać uwzględnione w deklaracji interfejsu.Aby uzyskać więcej informacji, zobacz Wyodrębnij interfejsu przeróbek (C#).

  7. Dodaj public słowo kluczowe, aby deklaracja interfejsu.

  8. Uwidacznianie interfejsu COM poprzez dodanie następującego ComVisibleAttribute atrybut do interfejsu.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Otworzyć dokument (Word) lub w arkuszu (Excel), Projektant w Visual Studio.

  10. W Właściwości okno, wybierz ReferenceAssemblyFromVbaProject właściwość i zmień wartość na True.

    [!UWAGA]

    Jeśli skoroszyt lub dokument nie zawiera kodu języka VBA lub jeśli kod VBA w dokumencie nie jest zaufany do uruchomienia, zostanie wyświetlony komunikat o błędzie podczas ustawiania ReferenceAssemblyFromVbaProject właściwość, aby True.Wynika to z programu Visual Studio nie można zmodyfikować projekt VBA w dokumencie w tej sytuacji.

  11. Kliknij przycisk OK w wiadomości, która jest wyświetlana.Ten komunikat przypomina, że jeśli dodasz VBA kod do skoroszytu lub dokumentu podczas pracy w projekcie od Visual Studio, kod VBA utracisz przy następnym Skompiluj projekt.Wynika to z dokumentu w kompilacji są wyprowadzane folder jest zastępowane przy każdym Skompiluj projekt.

    W tym momencie Visual Studio konfiguruje projekt tak, aby zadzwonić do zespołu projektu VBA.Visual Studio dodaje również metodę o nazwie GetManagedClass do projektu VBA.Tę metodę można wywołać z dowolnego miejsca w projekcie VBA, aby dostęp do tej klasy, które narażone na VBA.

  12. Skompiluj projekt.

Zobacz też

Zadania

Jak: tworzenie projektów pakietu Office w programie Visual Studio

Instruktaż: Wywołanie kodu z języka VBA w Visual C# projektu

Jak: narazić kodu VBA w projekcie programu Visual Basic

Inne zasoby

Projektowanie i tworzenie rozwiązań pakietu Office

Łączenie VBA i dostosowania na poziomie dokumentu