Langganan VBA Di Luar Jangkauan (Kesalahan Waktu Larian '9') - Mengapa Ralat ini Berlaku?

Langganan Excel VBA Di Luar Jangkauan

Langganan di luar jangkauan adalah ralat yang kita hadapi di VBA ketika kita cuba merujuk sesuatu atau pemboleh ubah yang tidak ada dalam kod, misalnya, mari kita anggap kita tidak mempunyai pemboleh ubah bernama x tetapi kita menggunakan fungsi msgbox pada x kita akan menemui langganan di luar ralat.

Ralat VBA di luar rentang berlaku kerana objek yang kami cuba akses tidak ada. Ini adalah jenis ralat dalam pengekodan VBA, dan ini adalah "Ralat Jalankan Masa 9". Penting untuk memahami konsep untuk menulis kod yang cekap, dan lebih penting lagi untuk memahami kesalahan kod VBA anda untuk menyahpepijat kod dengan cekap.

Sekiranya kesalahan pengkodan anda dan anda tidak tahu apa kesalahan itu semasa anda hilang.

Seorang doktor tidak boleh memberi ubat kepada pesakitnya tanpa mengetahui apa penyakitnya. Yang pasti, doktor dan pesakit kedua-duanya tahu ada penyakit (kesalahan), tetapi penting untuk memahami penyakit (kesalahan) daripada memberi ubat kepadanya. Sekiranya anda dapat memahami kesalahan dengan sempurna, maka lebih mudah untuk mencari jalan penyelesaiannya.

Pada catatan serupa dalam artikel ini, kita akan melihat salah satu kesalahan penting yang biasanya kita hadapi secara berkala, iaitu, ralat "Subscript Out of Range" di Excel VBA.

Apakah Ralat di luar Ralat dalam Excel VBA?

Sebagai contoh, jika anda merujuk pada helaian yang tidak ada buku kerja, maka kami mendapat ralat Jalankan waktu 9: "Langganan di luar Jangkauan."

Sekiranya anda mengklik butang Tamat, ia akan mengakhiri subproses, jika anda mengklik debug, ia akan membawa anda ke garis kod di mana ia mengalami ralat, dan bantuan akan membawa anda ke halaman laman web Microsoft.

Mengapa Ralat Langganan Di Luar Jangkauan Berlaku?

Seperti yang saya katakan sebagai doktor penting untuk mencari si mati sebelum memikirkan ubatnya. Kesalahan langganan VBA di luar julat berlaku apabila baris kod tidak membaca objek yang kami masukkan.

Contohnya, lihat gambar di bawah. Saya mempunyai tiga helaian bernama Sheet1, Sheet2, Sheet3.

Sekarang dalam kod, saya telah menulis kod untuk memilih lembaran "Penjualan."

Kod:

Sub Macro2 () Helaian ("Penjualan"). Pilih Sub Akhir

Sekiranya saya menjalankan kod ini menggunakan kunci F5 atau secara manual, saya akhirnya akan mendapat ralat Jalankan waktu 9: "Langganan di luar Jangkauan."

Ini kerana saya cuba mengakses objek lembaran kerja "Penjualan", yang tidak ada dalam buku kerja. Ini adalah ralat masa jalan kerana ralat ini berlaku semasa menjalankan kod.

Kesalahan langganan lain yang biasa kita dapati ialah ketika kita merujuk ke buku kerja yang tidak ada. Contohnya, lihat kod di bawah.

Kod:

Sub Makro1 () Dim Wb Sebagai Set Buku Kerja Wb = Buku Kerja ("Lembaran Gaji.xlsx") Sub Akhir

Kod di atas mengatakan pemboleh ubah WB harus sama dengan buku kerja "Salary Sheet.xlsx." Setakat ini, buku kerja ini tidak dibuka di komputer saya. Sekiranya saya menjalankan kod ini secara manual atau melalui kunci F5, saya akan mendapat ralat Jalankan waktu 9: "Langganan di luar Jangkauan."

Ini disebabkan oleh buku kerja yang saya maksudkan, yang tidak dibuka seperti sekarang atau tidak ada sama sekali.

Ralat Langganan VBA dalam Susunan

Apabila anda menyatakan array sebagai array dinamik, dan jika anda tidak menggunakan kata DIM atau REDIM dalam VBA untuk menentukan panjang array, kami biasanya mendapat Langganan VBA dari rentang kesalahan. Contohnya, lihat kod di bawah.

Kod:

Sub Macro3 () Dim MyArray () Selagi MyArray Panjang (1) = 25 Sub Akhir

Di atas, saya telah menyatakan pemboleh ubah sebagai tatasusunan, tetapi saya belum memberikan titik permulaan dan akhir; sebaliknya, saya telah menetapkan array pertama nilai 25.

Sekiranya saya menjalankan kod ini menggunakan kunci F5 atau secara manual, kita akan mendapat ralat Jalankan waktu 9: "Langganan di luar Jangkauan."

Untuk menyelesaikan masalah ini, saya perlu menetapkan panjang array dengan menggunakan kata Redim.

Kod:

Sub Macro3 () Dim MyArray () Selagi ReDim MyArray (1 Hingga 5) MyArray (1) = 25 Sub Akhir

Kod ini tidak memberikan sebarang kesalahan.

Bagaimana Menunjukkan Kesalahan di Akhir Kod VBA?

Sekiranya anda tidak mahu melihat ralat semasa kodnya sedang berjalan tetapi memerlukan senarai ralat di penghujungnya, maka anda perlu menggunakan pengendali ralat "On Error Resume". Lihat kod di bawah.

Kod:

Sub Macro1 () Dim Wb Sebagai Workbook On Error Resume Next Set Wb = Workbooks ("Salary Sheet.xlsx") MsgBox Err.Deskripsi Akhir Sub

Seperti yang telah kita lihat, kod ini akan membuang ralat Jalankan waktu 9: "Langganan di luar Range di Excel VBA . Tetapi saya harus menggunakan pengendali ralat On Error Resume Next di VBA semasa menjalankan kod. Kami tidak akan mendapat mesej ralat. Sebaliknya pada kotak mesej akhir menunjukkan kepada saya keterangan ralat seperti ini.

Anda boleh memuat turun Templat Excel VBA Out of Range di sini: - Templat Subscript Out of Range VBA

Artikel menarik...