Udostępnij za pośrednictwem


Uwidaczniaj kod w języku VBA w projekcie Visual C#

Kod w projekcie Visual C# można uwidocznić w kodzie Visual Basic for Applications (VBA), jeśli chcesz, aby dwa typy kodu współdziałały ze sobą.

Proces języka Visual C# różni się od procesu Visual Basic. Aby uzyskać więcej informacji, zobacz How to: Expose code to VBA in a Visual Basic project (Jak uwidaczniać kod w języku VBA w projekcie Visual Basic).

Dotyczy: informacje w tym temacie dotyczą projektów na poziomie dokumentu dla programów Excel i Word. Aby uzyskać więcej informacji, zobacz Funkcje dostępne przez aplikacja pakietu Office lication i typ projektu.

Uwidacznianie kodu w projekcie Visual C#

Aby włączyć kod VBA w celu wywołania kodu w projekcie Visual C#, zmodyfikuj kod tak, aby był widoczny dla modelu COM, a następnie ustaw właściwość ReferenceAssemblyFromVbaProject na true w projektancie.

Aby zapoznać się z przewodnikiem, który pokazuje, jak wywołać metodę w projekcie Visual C# z języka VBA, zobacz Przewodnik: wywoływanie kodu z języka VBA w projekcie Visual C#.

Aby uwidocznić kod w projekcie Visual C# w języku VBA

  1. Otwórz lub utwórz projekt na poziomie dokumentu oparty na dokumencie programu Word, skoroszycie programu Excel lub szablonie programu Excel obsługującym makra oraz zawierającym już kod VBA.

    Aby uzyskać więcej informacji na temat formatów plików dokumentów, które obsługują makra, zobacz Łączenie dostosowań języka VBA i dostosowywania na poziomie dokumentu.

    Uwaga

    Tej funkcji nie można używać w projektach szablonów programu Word.

  2. Upewnij się, że kod VBA w dokumencie może być uruchamiany bez monitowania użytkownika o włączenie makr. Kod VBA do uruchomienia można ufać, dodając lokalizację projektu pakietu Office do listy zaufanych lokalizacji w ustawieniach Centrum zaufania dla programu Word lub Excel.

  3. Dodaj element członkowski, który chcesz uwidocznić w języku VBA w klasie publicznej w projekcie, i zadeklaruj nowy element członkowski jako publiczny.

  4. Zastosuj następujące ComVisibleAttribute atrybuty i ClassInterfaceAttribute do klasy, którą uwidaczniasz w języku VBA. Te atrybuty sprawiają, że klasa jest widoczna dla modelu COM, ale bez generowania interfejsu klasy.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Zastąpi metodę GetAutomationObject klasy elementu hosta w projekcie, aby zwrócić wystąpienie klasy, która jest uwidaczniana w języku VBA:

    • Jeśli uwidaczniasz klasę elementu hosta w języku VBA, przesłoń metodę GetAutomationObject , która należy do tej klasy, i zwróć bieżące wystąpienie klasy.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Jeśli uwidaczniasz klasę, która nie jest elementem hosta w języku VBA, przesłoń metodę GetAutomationObject dowolnego elementu hosta w projekcie i zwróć wystąpienie klasy elementu innego niż host. Na przykład poniższy kod zakłada, że uwidaczniasz klasę o nazwie DocumentUtilities VBA.

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

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

  6. Wyodrębnij interfejs z klasy, która jest uwidaczniana w języku VBA. W oknie dialogowym Wyodrębnij interfejs wybierz publiczne elementy członkowskie, które mają zostać uwzględnione w deklaracji interfejsu. Aby uzyskać więcej informacji, zobacz Wyodrębnianie refaktoryzacji interfejsu.

  7. Dodaj publiczne słowo kluczowe do deklaracji interfejsu.

  8. Aby interfejs był widoczny dla modelu COM, dodaj następujący ComVisibleAttribute atrybut do interfejsu.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Otwórz dokument (dla programu Word) lub arkusz (dla programu Excel) w projektancie w programie Visual Studio.

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

    Uwaga

    Jeśli skoroszyt lub dokument nie zawiera jeszcze kodu VBA lub jeśli kod VBA w dokumencie nie jest zaufany do uruchomienia, podczas ustawiania właściwości ReferenceAssemblyFromVbaProject na wartość True zostanie wyświetlony komunikat o błędzie. Dzieje się tak, ponieważ program Visual Studio nie może zmodyfikować projektu VBA w dokumencie w tej sytuacji.

  11. Kliknij przycisk OK w wyświetlonym komunikacie. Ten komunikat przypomina, że w przypadku dodania kodu VBA do skoroszytu lub dokumentu podczas uruchamiania projektu z programu Visual Studio kod VBA zostanie utracony przy następnej kompilacji projektu. Dzieje się tak, ponieważ dokument w folderze danych wyjściowych kompilacji jest zastępowany za każdym razem, gdy kompilujesz projekt.

    W tym momencie program Visual Studio konfiguruje projekt tak, aby projekt VBA mógł wywoływać zestaw. Program 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 uzyskać dostęp do klasy uwidocznionej w języku VBA.

  12. Skompiluj projekt.