Proyek VBA
Proyek VBA
Panduan ini menunjukkan cara memeriksa dan memodifikasi proyek VBA yang tertanam dalam dokumen yang mendukung makro dengan Aspose.Words FOSS untuk .NET. Aspose.Words FOSS untuk .NET dapat memeriksa dan memodifikasi proyek VBA yang tertanam dalam dokumen yang mendukung makro (.docm) — modul-modulnya, kode sumber, dan referensi perpustakaan — melalui Document.VbaProject dan model objek VbaProject/VbaModule. Ini adalah inspeksi dan penyuntingan proyek, bukan eksekusi makro: Aspose.Words tidak pernah menyertakan runtime VBA, baik dalam produk komersial maupun edisi FOSS ini, sehingga kode VBA dibaca dan dimodifikasi sebagai data, bukan dijalankan.
Mengakses Proyek VBA Dokumen
Document.VbaProject mengembalikan VbaProject, atau null jika dokumen tidak memiliki proyek VBA. Document.HasMacros melaporkan apakah proyek VBA ada tanpa Anda harus mengakses VbaProject terlebih dahulu. VbaProject.Name, CodePage, IsSigned, dan IsProtected menggambarkan proyek itu sendiri.
Membaca dan Menyunting Modul
VbaProject.Modules mengembalikan VbaModuleCollection. Indeks ke dalamnya dengan nama untuk mencari modul tertentu (mis. modules["ModuleName"]), atau mengenumerasi seluruh koleksi. Setiap VbaModule mengekspos Name, Type (sebuah VbaModuleType: DocumentModule, ProceduralModule, ClassModule, atau DesignerModule), dan — secara penting — SourceCodenya sebagai properti string yang dapat ditulisi, sehingga sumber modul dapat dibaca dan ditulis kembali secara programatik. VbaModuleCollection.Add(vbaModule) dan Remove(module) menambah atau menghapus modul dari proyek.
Referensi Perpustakaan
VbaProject.References mengembalikan VbaReferenceCollection dari objek VbaReference — perpustakaan tipe Automation dan proyek VBA lainnya yang menjadi dependensi kode makro. VbaReference.Type melaporkan VbaReferenceType (Registered, Project, Original, atau Control), dan LibId mengidentifikasi perpustakaan yang dirujuk. VbaReferenceCollection.Remove(item) / RemoveAt(index) menghapus referensi.
Menghapus Proyek VBA
Document.RemoveMacros() menghapus proyek VBA dari dokumen sepenuhnya — berguna untuk menghasilkan salinan dokumen bebas makro yang awalnya dikirim dengan makro.
Tips dan Praktik Terbaik
- Periksa
Document.HasMacrossebelum menyentuhDocument.VbaProjectuntuk menghindari penanganan null pada dokumen yang tidak pernah memiliki makro. - Anggap
VbaModule.SourceCodesebagai teks biasa — karena tidak ada runtime VBA, mengeditnya tidak memvalidasi kode; VBA yang rusak masih dapat diproses kembali, tetapi tidak akan berjalan dengan benar di Word sampai diperbaiki. - Gunakan
VbaProject.IsSigned/IsProtecteduntuk mendeteksi proyek yang ditandatangani atau dilindungi sebelum mencoba memodifikasi modul-modulnya. Document.RemoveMacros()adalah cara paling sederhana untuk menghapus makro bagi salinan distribusi “clean”, daripada secara manual membersihkan setiap modul.
Masalah Umum
| Masalah | Penyebab | Perbaikan |
|---|---|---|
Document.VbaProject adalah null | Dokumen tidak memiliki proyek VBA | Periksa Document.HasMacros terlebih dahulu sebelum mengakses anggota VbaProject |
Mengharapkan makro dijalankan setelah mengedit SourceCode | Aspose.Words tidak memiliki mesin eksekusi VBA | Gunakan API ini hanya untuk membaca/mengubah sumber dan struktur makro; jalankan dokumen yang dihasilkan di lingkungan dengan runtime VBA, seperti Microsoft Word, untuk mengeksekusi kode |
Mengindeks VbaModuleCollection berdasarkan nama tidak menghasilkan apa-apa | Ketidaksesuaian nama modul (case atau ejaan tepat) | Enumerasikan VbaProject.Modules untuk mengonfirmasi nama modul yang tepat |
FAQ
Apakah Aspose.Words FOSS untuk .NET dapat menjalankan makro VBA dalam dokumen?
Tidak. Baik edisi ini maupun produk Aspose.Words komersial tidak menyertakan mesin eksekusi VBA — proyek VBA dibaca dan dimodifikasi sebagai data (sumber modul, referensi, metadata proyek), tidak pernah dijalankan.
Bagaimana cara membaca kode sumber makro?
Dapatkan modul dengan mengindeks VbaProject.Modules berdasarkan nama (misalnya modules["ModuleName"]), kemudian baca properti SourceCode-nya.
Apakah saya dapat menambahkan modul VBA baru ke dokumen?
Ya — buat sebuah VbaModule dan tambahkan ke VbaModuleCollection proyek melalui Add(vbaModule).
Bagaimana cara saya memeriksa apakah sebuah dokumen bahkan memiliki makro sebelum memprosesnya?
Baca Document.HasMacros; itu true jika dokumen membawa proyek VBA, tanpa Anda harus mengakses Document.VbaProject terlebih dahulu.
Bagaimana cara menghapus semua makro dari sebuah dokumen?
Panggil Document.RemoveMacros().
API Reference Ringkasan
| Kelas / Metode | Deskripsi |
|---|---|
Document.VbaProject | VbaProject dokumen, atau null jika tidak memiliki makro |
Document.HasMacros | Apakah proyek VBA ada |
VbaProject | Name, Modules, References, CodePage, IsSigned, IsProtected |
VbaModule | Satu modul: Name, Type (VbaModuleType), dapat ditulis SourceCode |
VbaModuleCollection | Add(), pengindeks berdasarkan nama, Remove(), Count |
VbaReference / VbaReferenceCollection | Perpustakaan tipe yang dirujuk: Type (VbaReferenceType), LibId |
Document.RemoveMacros() | Menghapus proyek VBA dari dokumen |