Bagikan melalui


Mengekspos kode ke VBA dalam proyek Visual C#

Anda dapat mengekspos kode dalam proyek Visual C# ke kode Visual Basic for Applications (VBA) jika Anda ingin dua jenis kode berinteraksi satu sama lain.

Proses Visual C# berbeda dari proses Visual Basic. Untuk informasi selengkapnya, lihat Cara: Mengekspos kode ke VBA dalam proyek Visual Basic.

Berlaku untuk: Informasi dalam topik ini berlaku untuk proyek tingkat dokumen untuk Excel dan Word. Untuk informasi selengkapnya, lihat Fitur yang tersedia berdasarkan aplikasi Office likasi dan jenis proyek.

Mengekspos kode dalam proyek Visual C#

Untuk mengaktifkan kode VBA untuk memanggil kode dalam proyek Visual C#, ubah kode sehingga terlihat oleh COM, lalu atur properti ReferenceAssemblyFromVbaProject ke True di perancang.

Untuk panduan yang menunjukkan cara memanggil metode dalam proyek Visual C# dari VBA, lihat Panduan: Kode panggilan dari VBA dalam proyek Visual C#.

Untuk mengekspos kode dalam proyek Visual C# ke VBA

  1. Buka atau buat proyek tingkat dokumen yang didasarkan pada dokumen Word, buku kerja Excel, atau templat Excel yang mendukung makro, dan yang sudah berisi kode VBA.

    Untuk informasi selengkapnya tentang format file dokumen yang mendukung makro, lihat Menggabungkan VBA dan kustomisasi tingkat dokumen.

    Catatan

    Fitur ini tidak dapat digunakan dalam proyek templat Word.

  2. Pastikan bahwa kode VBA dalam dokumen diizinkan untuk dijalankan tanpa meminta pengguna untuk mengaktifkan makro. Anda bisa mempercayai kode VBA untuk dijalankan dengan menambahkan lokasi proyek Office ke daftar lokasi tepercaya di pengaturan Pusat Kepercayaan untuk Word atau Excel.

  3. Tambahkan anggota yang ingin Anda ekspos ke VBA ke kelas publik dalam proyek Anda, dan nyatakan anggota baru sebagai publik.

  4. Terapkan atribut dan ClassInterfaceAttribute berikut ComVisibleAttribute ke kelas yang Anda ekspos ke VBA. Atribut ini membuat kelas terlihat oleh COM, tetapi tanpa menghasilkan antarmuka kelas.

    [System.Runtime.InteropServices.ComVisible(true)]
    [System.Runtime.InteropServices.ClassInterface(
        System.Runtime.InteropServices.ClassInterfaceType.None)]
    
  5. Ambil alih metode GetAutomationObject dari kelas item host di proyek Anda untuk mengembalikan instans kelas yang Anda ekspos ke VBA:

    • Jika Anda mengekspos kelas item host ke VBA, ambil alih metode GetAutomationObject milik kelas ini, dan kembalikan instans kelas saat ini.

      protected override object GetAutomationObject()
      {
          return this;
      }
      
    • Jika Anda mengekspos kelas yang bukan item host ke VBA, ambil alih metode GetAutomationObject dari item host apa pun di proyek Anda, dan kembalikan instans kelas item non-host. Misalnya, kode berikut mengasumsikan bahwa Anda mengekspos kelas bernama DocumentUtilities ke VBA.

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

      Untuk informasi selengkapnya tentang item host, lihat Gambaran umum item host dan kontrol host.

  6. Ekstrak antarmuka dari kelas yang Anda ekspos ke VBA. Dalam kotak dialog Ekstrak Antarmuka , pilih anggota publik yang ingin Anda sertakan dalam deklarasi antarmuka. Untuk informasi selengkapnya, lihat Mengekstrak refaktor antarmuka.

  7. Tambahkan kata kunci publik ke deklarasi antarmuka.

  8. Buat antarmuka terlihat oleh COM dengan menambahkan atribut berikut ComVisibleAttribute ke antarmuka.

    [System.Runtime.InteropServices.ComVisible(true)]
    
  9. Buka dokumen (untuk Word) atau lembar kerja (untuk Excel) di perancang di Visual Studio.

  10. Di jendela Properti , pilih properti ReferenceAssemblyFromVbaProject , dan ubah nilainya menjadi True.

    Catatan

    Jika buku kerja atau dokumen belum berisi kode VBA atau jika kode VBA dalam dokumen tidak dipercaya untuk dijalankan, Anda akan menerima pesan kesalahan saat Anda mengatur properti ReferenceAssemblyFromVbaProject ke True. Ini karena Visual Studio tidak dapat mengubah proyek VBA dalam dokumen dalam situasi ini.

  11. Klik OK dalam pesan yang ditampilkan. Pesan ini mengingatkan Anda bahwa jika Anda menambahkan kode VBA ke buku kerja atau dokumen saat menjalankan proyek dari Visual Studio, kode VBA akan hilang saat Anda membuat proyek berikutnya. Ini karena dokumen dalam folder output build ditimpa setiap kali Anda membangun proyek.

    Pada titik ini, Visual Studio mengonfigurasi proyek sehingga proyek VBA dapat memanggil ke perakitan. Visual Studio juga menambahkan metode bernama GetManagedClass ke proyek VBA. Anda dapat memanggil metode ini dari mana saja dalam proyek VBA untuk mengakses kelas yang Anda ekspos ke VBA.

  12. Bangun proyek.