Prosedur "Fungsi" dan "Sub" dalam VBA

Fungsi VBA terbina dalam

Sebelum anda mula mencipta fungsi VBA anda sendiri, adalah baik untuk mengetahui bahawa Excel VBA mempunyai koleksi yang kaya dengan fungsi terbina dalam terbina yang boleh anda gunakan semasa menulis kod anda.

Senarai fungsi ini boleh dilihat dalam editor VBA:

  • Buka buku kerja Excel dan lancarkan editor VBA (klik untuk melakukan ini Alt + F11, dan kemudian tekan F2.
  • Pilih pustaka daripada senarai lungsur turun di bahagian atas sebelah kiri skrin VBA.
  • Senarai kelas dan fungsi VBA terbina dalam akan muncul. Klik pada nama fungsi untuk memaparkan penerangan ringkasnya di bahagian bawah tetingkap. menekan F1 akan membuka halaman bantuan dalam talian untuk ciri tersebut.

Di samping itu, senarai lengkap fungsi VBA terbina dalam dengan contoh boleh didapati di Pusat Pembangun Visual Basic.

Prosedur tersuai "Fungsi" dan "Sub" dalam VBA

Dalam Excel Visual Basic, satu set arahan yang melaksanakan tugas tertentu diletakkan dalam prosedur. fungsi (Fungsi) atau Sub (Subrutin). Perbezaan utama antara prosedur fungsi и Sub adakah itu prosedurnya fungsi mengembalikan hasil, prosedur Sub – tidak.

Oleh itu, jika anda perlu melakukan tindakan dan mendapatkan beberapa hasil (contohnya, jumlahkan beberapa nombor), maka prosedur biasanya digunakan fungsi, dan untuk melakukan beberapa tindakan sahaja (contohnya, menukar pemformatan sekumpulan sel), anda perlu memilih prosedur Sub.

Argumen

Pelbagai data boleh dihantar ke prosedur VBA menggunakan argumen. Senarai hujah ditentukan semasa mengisytiharkan prosedur. Sebagai contoh, prosedur Sub dalam VBA menambah integer (Integer) yang diberikan kepada setiap sel dalam julat yang dipilih. Anda boleh menghantar nombor ini kepada prosedur menggunakan hujah, seperti ini:

Sub AddToCells(i As Integer) ... End Sub

Perlu diingat bahawa mempunyai hujah untuk prosedur fungsi и Sub dalam VBA adalah pilihan. Sesetengah prosedur tidak memerlukan hujah.

Hujah Pilihan

Prosedur VBA boleh mempunyai hujah pilihan. Ini adalah hujah yang pengguna boleh tentukan jika mereka mahu, dan jika ia ditinggalkan, prosedur menggunakan nilai lalai untuk mereka.

Kembali kepada contoh sebelumnya, untuk membuat hujah integer kepada fungsi pilihan, ia akan diisytiharkan seperti ini:

Sub AddToCells(Pilihan i Sebagai Integer = 0)

Dalam kes ini, hujah integer i lalainya ialah 0.

Terdapat beberapa argumen pilihan dalam prosedur, semuanya disenaraikan di penghujung senarai argumen.

Melewati hujah mengikut nilai dan rujukan

Argumen dalam VBA boleh dihantar kepada prosedur dalam dua cara:

  • byval – menghantar hujah mengikut nilai. Ini bermakna hanya nilai (iaitu, salinan hujah) dihantar ke prosedur, dan oleh itu sebarang perubahan yang dibuat pada hujah di dalam prosedur akan hilang apabila prosedur keluar.
  • OlehRef – meluluskan hujah dengan rujukan. Iaitu, alamat sebenar lokasi hujah dalam ingatan dihantar kepada prosedur. Sebarang perubahan yang dibuat pada hujah di dalam prosedur akan disimpan apabila prosedur keluar.

Menggunakan kata kunci byval or OlehRef dalam pengisytiharan prosedur, anda boleh menentukan cara hujah dihantar kepada prosedur. Ini ditunjukkan dalam contoh di bawah:

Sub AddToCells(ByVal i As Integer) ... End Sub
Dalam kes ini, hujah integer i dilalui oleh nilai. Selepas meninggalkan prosedur Sub semua dibuat dengan i perubahan akan hilang.
Sub AddToCells(ByRef i As Integer) ... End Sub
Dalam kes ini, hujah integer i diluluskan dengan rujukan. Selepas meninggalkan prosedur Sub semua dibuat dengan i perubahan akan disimpan dalam pembolehubah yang dihantar kepada prosedur Sub.

Ingat bahawa hujah dalam VBA diluluskan secara rujukan secara lalai. Dengan kata lain, jika kata kunci tidak digunakan byval or OlehRef, maka hujah akan diluluskan dengan rujukan.

Sebelum meneruskan prosedur fungsi и Sub dengan lebih terperinci, adalah berguna untuk melihat sekali lagi ciri dan perbezaan antara kedua-dua jenis prosedur ini. Berikut adalah perbincangan ringkas mengenai prosedur VBA fungsi и Sub dan contoh mudah ditunjukkan.

Prosedur VBA «Fungsi»

Editor VBA mengiktiraf prosedur fungsiapabila ia menemui sekumpulan perintah yang disertakan di antara pernyataan pembukaan dan penutup berikut:

Fungsi ... Fungsi Tamat

Seperti yang dinyatakan sebelum ini, prosedur fungsi dalam VBA (berbanding dengan Sub) mengembalikan nilai. Peraturan berikut digunakan untuk mengembalikan nilai:

  • Jenis data nilai pulangan mesti diisytiharkan dalam pengepala prosedur fungsi.
  • Pembolehubah yang mengandungi nilai pulangan mesti dinamakan sama dengan prosedur fungsi. Pembolehubah ini tidak perlu diisytiharkan secara berasingan, kerana ia sentiasa wujud sebagai sebahagian daripada prosedur. fungsi.

Ini digambarkan dengan baik dalam contoh berikut.

Contoh Fungsi VBA: Melakukan Operasi Matematik pada 3 Nombor

Berikut ialah contoh kod prosedur VBA fungsi, yang mengambil tiga jenis hujah Dua kali ganda (nombor titik terapung berketepatan ganda). Akibatnya, prosedur mengembalikan bilangan jenis lain Dua kali gandasama dengan jumlah dua hujah pertama tolak hujah ketiga:

Fungsi SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) Sebagai Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Prosedur VBA yang sangat mudah ini fungsi menggambarkan bagaimana data dihantar ke prosedur melalui hujah. Anda boleh melihat bahawa jenis data yang dikembalikan oleh prosedur ditakrifkan sebagai Dua kali ganda (kata-kata itu berkata Berganda selepas senarai hujah). Contoh ini juga menunjukkan bagaimana keputusan prosedur fungsi disimpan dalam pembolehubah dengan nama yang sama dengan nama prosedur.

Memanggil prosedur VBA "Fungsi"

Jika prosedur mudah di atas fungsi dimasukkan ke dalam modul dalam editor Visual Basic, ia boleh dipanggil daripada prosedur VBA lain atau digunakan pada lembaran kerja dalam buku kerja Excel.

Panggil prosedur VBA "Fungsi" daripada prosedur lain

Prosedur fungsi boleh dipanggil daripada prosedur VBA lain dengan hanya memberikan prosedur itu kepada pembolehubah. Contoh berikut menunjukkan panggilan ke prosedur Summinus, yang ditakrifkan di atas.

Sub utama() Jumlah malap sebagai Jumlah Ganda = SumMinus(5, 4, 3) End Sub

Panggil prosedur VBA "Fungsi" daripada lembaran kerja

prosedur VBA fungsi boleh dipanggil daripada lembaran kerja Excel dengan cara yang sama seperti mana-mana fungsi Excel terbina dalam yang lain. Oleh itu, prosedur yang dibuat dalam contoh sebelumnya fungsi - Summinus boleh dipanggil dengan memasukkan ungkapan berikut ke dalam sel lembaran kerja:

=SumMinus(10, 5, 2)

Prosedur VBA «Sub»

Editor VBA memahami bahawa terdapat prosedur di hadapannya Subapabila ia menemui sekumpulan perintah yang disertakan di antara pernyataan pembukaan dan penutup berikut:

Sub ... Tamat Sub

Prosedur VBA "Sub": Contoh 1. Penjajaran tengah dan saiz fon berubah dalam julat sel yang dipilih

Pertimbangkan contoh prosedur VBA mudah Sub, yang tugasnya adalah untuk menukar pemformatan julat sel yang dipilih. Sel dipusatkan (kedua-dua menegak dan mendatar) dan saiz fon ditukar kepada yang ditentukan pengguna:

Sub Format_Centered_And_Sized(Pilihan iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Prosedur ini Sub melakukan tindakan tetapi tidak mengembalikan hasil.

Contoh ini juga menggunakan hujah Pilihan Saiz huruf. Jika hujah Saiz huruf tidak lulus ke prosedur Sub, maka nilai lalainya ialah 10. Walau bagaimanapun, jika hujah Saiz huruf diluluskan ke prosedur Sub, maka julat sel yang dipilih akan ditetapkan kepada saiz fon yang ditentukan oleh pengguna.

Sub Prosedur VBA: Contoh 2: Jajarkan Tengah dan Fon Tebal dalam Julat Sel Terpilih

Prosedur berikut adalah serupa dengan yang baru dibincangkan, tetapi kali ini, bukannya mengubah saiz, ia menggunakan gaya fon tebal pada julat sel yang dipilih. Ini adalah contoh prosedur Sub, yang tidak memerlukan hujah:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Memanggil Prosedur "Sub" dalam Excel VBA

Panggil prosedur VBA "Sub" daripada prosedur lain

Untuk memanggil prosedur VBA Sub daripada prosedur VBA yang lain, anda perlu menulis kata kunci Hubungi, nama prosedur Sub dan seterusnya dalam kurungan adalah hujah-hujah prosedur. Ini ditunjukkan dalam contoh di bawah:

Sub utama() Format Panggilan_Berpusat_Dan_Bersaiz(20) End Sub

Jika prosedur Format_Berpusat_Dan_Bersaiz mempunyai lebih daripada satu hujah, mereka mesti dipisahkan dengan koma. seperti ini:

Sub utama() Format Panggilan_Berpusat_Dan_Bersaiz(arg1, arg2, ...) End Sub

Panggil prosedur VBA "Sub" dari lembaran kerja

Prosedur Sub tidak boleh dimasukkan terus ke dalam sel helaian Excel, seperti yang boleh dilakukan dengan prosedur fungsikerana prosedur Sub tidak mengembalikan nilai. Walau bagaimanapun, prosedur Sub, yang tidak mempunyai hujah dan diisytiharkan sebagai Awam (seperti yang ditunjukkan di bawah) akan tersedia kepada pengguna lembaran kerja. Oleh itu, jika prosedur mudah yang dibincangkan di atas Sub dimasukkan ke dalam modul dalam Visual Basic Editor, prosedur Format_Berpusat_Dan_Tebal akan tersedia untuk digunakan dalam lembaran kerja Excel, dan prosedur Format_Berpusat_Dan_Bersaiz – tidak akan tersedia kerana ia mempunyai hujah.

Berikut ialah cara mudah untuk menjalankan (atau melaksanakan) prosedur Sub, boleh diakses daripada lembaran kerja:

  • Keratan Akhbar Alt + F8 (tekan kekunci Alt dan sambil menahannya, tekan kekunci F8).
  • Dalam senarai makro yang muncul, pilih yang anda mahu jalankan.
  • Keratan Akhbar Main (lari)

Untuk melaksanakan prosedur Sub dengan cepat dan mudah, anda boleh menetapkan pintasan papan kekunci kepadanya. Untuk ini:

  • Keratan Akhbar Alt + F8.
  • Dalam senarai makro yang muncul, pilih yang anda ingin tetapkan pintasan papan kekunci.
  • Keratan Akhbar Parameter (Pilihan) dan dalam kotak dialog yang muncul, masukkan pintasan papan kekunci.
  • Keratan Akhbar OK dan tutup dialog Makro (Makro).

Perhatian: Apabila menetapkan pintasan papan kekunci kepada makro, pastikan ia tidak digunakan sebagai standard dalam Excel (contohnya, Ctrl + C). Jika anda memilih pintasan papan kekunci yang sedia ada, ia akan ditetapkan semula kepada makro dan akibatnya, pengguna boleh memulakan makro secara tidak sengaja.

Skop Prosedur VBA

Bahagian 2 tutorial ini membincangkan skop pembolehubah dan pemalar serta peranan kata kunci. Awam и Swasta. Kata kunci ini juga boleh digunakan dengan prosedur VBA:

Sub AddToCells Awam(i Sebagai Integer) ... End Sub
Jika pengisytiharan prosedur didahului dengan kata kunci Awam, maka prosedur akan tersedia untuk semua modul dalam projek VBA tersebut.
Sub AddToCells Persendirian(i Sebagai Integer) ... End Sub
Jika pengisytiharan prosedur didahului dengan kata kunci Swasta, maka prosedur ini akan tersedia hanya untuk modul semasa. Ia tidak boleh dipanggil semasa dalam mana-mana modul lain atau dari buku kerja Excel.

Ingat bahawa jika sebelum mengisytiharkan prosedur VBA fungsi or Sub kata kunci tidak dimasukkan, sifat lalai ditetapkan untuk prosedur Awam (iaitu, ia akan tersedia di mana-mana dalam projek VBA ini). Ini berbeza dengan pengisytiharan berubah-ubah, yang secara lalai adalah Swasta.

Keluar awal dari prosedur VBA "Fungsi" dan "Sub"

Jika anda perlu menamatkan pelaksanaan prosedur VBA fungsi or Sub, tanpa menunggu penghujung semula jadi, maka untuk ini terdapat pengendali Fungsi Keluar и Keluar Sub. Penggunaan operator ini ditunjukkan di bawah menggunakan prosedur mudah sebagai contoh. fungsiA yang mengharapkan untuk menerima hujah positif untuk melaksanakan operasi selanjutnya. Jika nilai bukan positif dihantar ke prosedur, maka tiada operasi selanjutnya boleh dilakukan, jadi pengguna harus ditunjukkan mesej ralat dan prosedur harus keluar dengan segera:

Fungsi VAT_Amount(sVAT_Rate As Single) Sebagai Single VAT_Amount = 0 Jika sVAT_Rate <= 0 Kemudian MsgBox "Menjangkakan nilai Positif sVAT_Rate tetapi Diterima " & sVAT_Rate Keluar Fungsi Tamat Jika ... Tamat Fungsi

Sila ambil perhatian bahawa sebelum melengkapkan prosedur fungsi - VAT_Amount, fungsi VBA terbina dalam dimasukkan ke dalam kod MsgBox, yang memaparkan pop timbul amaran kepada pengguna.

Sila tinggalkan balasan anda