Aplikasi Excel VBA berhenti secara spontan dengan pesan “Eksekusi kode telah dihentikan”

151

Dari apa yang dapat saya lihat di web, ini adalah keluhan yang cukup umum, tetapi jawabannya tampaknya lebih jarang. Masalahnya adalah ini:

Kami memiliki sejumlah aplikasi Excel VBA yang bekerja sempurna di sejumlah mesin pengguna. Namun pada satu mesin mereka berhenti pada baris kode tertentu. Itu selalu merupakan garis yang sama, tetapi garis-garis itu tampaknya tidak memiliki kesamaan satu sama lain.

Jika Anda menekan F5 (jalankan) setelah berhenti, aplikasi berlanjut, jadi hampir seperti break point telah ditambahkan. Kami telah mencoba memilih 'hapus semua jeda' dari menu dan bahkan menambahkan jeda dan menghapusnya lagi.

Kami pernah mengalami masalah ini dengan satu aplikasi sebelumnya dan kami telah 'membuatnya' dengan memotong kode dari modul, mengkompilasi dan kemudian menempelkannya kembali dll.

Masalahnya sekarang tampaknya berkaitan dengan Excel itu sendiri daripada satu .xls, jadi kami sedikit tidak yakin bagaimana mengelola ini.

Setiap bantuan akan diterima dengan penuh syukur :)

Terima kasih,

Philip Whittington

Phil Whittington
sumber
2
Apakah pengguna menekan pelarian di tengah pemrosesan apa pun? Atau aplikasi lain yang mengirim kunci keluar?
shahkalpesh
1
Setelah memilih Hapus semua Breakpoint, apakah Anda juga mengkompilasi ulang dan menyimpan proyek VBA? Saya telah melihat masalah terkait dalam Word VBA di mana breakpoint yang sebelumnya dihapus masih menyebabkan istirahat.
Dirk Vollmar
Tidak ada yang diproses selama eksekusi, shahkalpesh. Divo - terima kasih, saya mungkin belum mencobanya dengan tepat dalam urutan itu. Akan melakukannya sekarang ...
Phil Whittington
Selain komentar divo, dapat bermanfaat untuk mengomentari baris yang relevan dan setiap baris yang akan menghentikan debug, kemudian dapat dihapus komentarnya dan kode dikompilasi ulang (lagi).
Fionnuala
Dan saya lupa menyebutkan: Untuk benar-benar memicu pembangunan kembali, biasanya perlu untuk memodifikasi sebuah baris, dan kemudian memindahkan kursor ke baris berikutnya untuk menandai kode sumber yang telah dimodifikasi (misalnya membuat perubahan, memindahkan kursor ke bawah, memindahkan kursor ke atas dan urungkan perubahan secara manual)
Dirk Vollmar

Jawaban:

404

Saya telah menemukan solusi kedua.

  1. Tekan tombol "Debug" di sembulan.
  2. Tekan Ctrl+ Pause|Breakdua kali.
  3. Tekan tombol play untuk melanjutkan.
  4. Simpan file setelah selesai.

Semoga ini bisa membantu seseorang.

Stan
sumber
12
+1: Wow, pos ini menyelamatkan saya dari dunia kesakitan. Solusi yang sangat tidak terduga untuk masalah aneh. Setelah menekan [Ctrl + Break] dua kali dan melanjutkan, saya menyimpan file. Setelah itu, masalah tidak lagi muncul ketika saya menutup dan membuka kembali file tersebut.
dbenham
28
Jika pernah ada jawaban yang pantas dipuji, ini dia. Jawaban yang bagus
The_Barman
4
Ini sangat membantu saya. Jawaban ini pantas mendapatkan 1000 upvotes. Saya terganggu oleh masalah ini selama 4-5 hari terakhir. Ini bekerja dengan sempurna.
demouser123
25
Adakah yang tahu mengapa ini berhasil? Atau dari mana asalnya? Apakah ini sihir?
ZX9
4
Masih membantu saya di 2017. Terima kasih!
Slab
16

Masalah ini berasal dari kekhasan aneh dalam Office / Windows.

Setelah mengembangkan potongan kode VBA yang sama dan menjalankannya ratusan kali (secara harfiah) selama beberapa hari terakhir saya mengalami masalah ini sekarang. Satu-satunya hal yang berbeda adalah bahwa sebelum mengalami masalah membingungkan ini, saya tidak sengaja mengakhiri eksekusi kode VBA dengan metode yang tidak lazim.

Saya membersihkan semua file temp, reboot, dll ... Ketika saya menjalankan kode lagi setelah semua ini saya masih mendapatkan masalah - sebelum saya memasuki loop pertama. Masuk akal bahwa "tekan" Debug "tombol di popup, lalu tekan dua kali [Ctrl + Break] dan setelah ini dapat terus tanpa berhenti" karena sesuatu dalam kombinasi Office / Windows belum merilis eksekusi. Terjebak.

Tindakan redundant Ctrl + Break mungkin menyelesaikan eksekusi yang tersisa.

pengguna2052260
sumber
14

Satu solusi ada di sini :

Solusi untuk masalah ini adalah dengan menambahkan baris kode "Application.EnableCancelKey = xlDisabled" di baris pertama makro Anda .. Ini akan memperbaiki masalah dan Anda akan dapat menjalankan makro dengan sukses tanpa mendapatkan pesan kesalahan "Code eksekusi telah terputus ”.

Tapi, setelah saya memasukkan baris kode ini, saya tidak dapat menggunakan Ctrl + Break lagi. Jadi itu berhasil tetapi tidak terlalu.

Stan
sumber
Terima kasih, Stan - itu pasti solusi jika Anda berada di bawah tekanan waktu dan hanya ingin itu berjalan! Sangat berguna.
Phil Whittington
1
Anda dapat mengaktifkan kembali dalam eksekusi yang sama dengan mengaturnya xlInterrupt. (Ini juga secara otomatis mengaktifkan kembali ketika eksekusi kode selesai.) Jawaban Anda yang lain bekerja untuk saya, tetapi kasus terburuk ini dapat digunakan sebagai perbaikan sementara. Informasi lebih lanjut tentang Application.EnableCancelKey
Kodithic
2
Jawaban yang benar - dan satu-satunya jawaban yang benar - ada di atas. Memasukkan setiap baris kode, termasuk “Application.EnableCancelKey = xlDisabled” hanya menggeser masalah ke baris lain. Seringkali, 'breakpoint' baru persis garis yang Anda masukkan. Satu-satunya alasan saya tidak merendahkan jawaban Anda adalah karena saya terpaksa menggunakannya sendiri, berulang kali, selama dekade terakhir.
Nigel Heffernan
6

Saya menemukan memukul ctrl + break sementara makro tidak berjalan memperbaiki masalah.

James
sumber
3

Saya akan mencoba hal-hal perbaikan yang biasa: - Jalankan Rob Bovey's VBA Code Cleaner pada Kode VBA Anda - hapus semua addins pada PC pengguna, khususnya COM dan .NET addins - Hapus semua pengguna .EXD file (MSoft Update incompatibilities) - Run Excel Deteksi & Perbaikan pada sistem pengguna - periksa ukuran file .xlb pengguna (harus 20-30K) - Reboot lalu hapus semua file Temp pengguna

Charles Williams
sumber
2

Terima kasih kepada semua orang atas masukan mereka. Masalah ini diselesaikan dengan memilih PERBAIKAN di Panel Kontrol. Saya kira ini secara eksplisit mendaftar ulang beberapa komponen COM asli Office dan melakukan hal-hal yang REINSTALL tidak. Saya berharap yang terakhir hanya melalui checklist dan kadang-kadang menerima apa yang ada jika sudah diinstal, mungkin. Saya kemudian memiliki masalah terpisah dengan mendaftarkan saya sendiri. NET dll untuk COM interop pada mesin pengguna (meskipun ini juga bekerja pada mesin lain) meskipun saya pikir ini adalah kesalahan saya daripada Microsoft. Terima kasih sekali lagi, saya sangat menghargainya.

Phil Whittington
sumber
2

Saya telah menemukan masalah ini beberapa kali selama pengembangan satu aplikasi Excel VBA yang kompleks. Terkadang Excel mulai merusak objek VBA secara acak. Dan satu-satunya obat adalah me-reboot mesin. Setelah reboot, Excel biasanya mulai bertindak normal.

Segera saya telah menemukan bahwa solusi yang mungkin untuk masalah ini adalah dengan menekan CTRL + Break sekali ketika makro TIDAK berjalan. Mungkin ini bisa membantu Anda juga.

bazinac
sumber
2

Saya punya masalah ini juga menggunakan excel 2007 dengan buku kerja foobar.xlsm (makro diaktifkan) yang akan mendapatkan "Eksekusi kode telah terputus" dengan hanya mencoba menutup buku kerja pada X merah di sudut kanan tanpa makro berjalan di semua, atau semua bentuk "inisialisasi", buku kerja, atau makro lembar kerja. Pilihan yang saya dapatkan adalah "Akhir" atau "Lanjutkan", Debug selalu diklik. Saya lakukan seperti poster sebelumnya menyarankan Control Panel-> Program dan Fitur-> klik kanan "Microsoft Office Proffesional 2007" (dalam kasus saya) -> ubah-> perbaikan.

Ini menyelesaikan masalah bagi saya. Saya mungkin menambahkan ini terjadi segera setelah pembaruan MS dan saya juga menemukan addin di Excel yang disebut "Team Foundation" dari Microsoft yang tentu saja saya tidak menginstal secara sukarela

Carlito
sumber
1

Saya ingin menambahkan rincian lebih lanjut ke jawaban Stan # 2 untuk alasan di bawah ini:

  • Saya menghadapi masalah ini sendiri lebih dari selusin kali dan tergantung pada kondisi proyek, saya memilih antara voodoo magic jawaban # 1 atau # 2. Ketika saya terus menghadapinya lagi, saya menjadi lebih tidak yakin mengapa itu terjadi.

  • Saya juga ingin menambahkan jawaban untuk pengguna Mac.

  • Ada beberapa keterbatasan dengan kedua kemungkinan jawaban ini:

    • jika kode dilindungi (dan Anda tidak tahu kata sandi) maka jawab # 1 tidak akan membantu.
    • jika kode tidak terlindungi maka jawab # 2 tidak akan membiarkan Anda men-debug kode tersebut.

  1. Itu dapat terjadi karena salah satu alasan di bawah ini:

    • Sistem operasi tidak mengalokasikan sumber daya sistem untuk proses Excel. ( Solusi: Seseorang hanya perlu memulai sistem operasi - tingkat keberhasilan sangat rendah tetapi telah dikenal untuk bekerja berkali-kali)

    • P-code adalah kode antara yang digunakan dalam Visual Basic (sebelum .NET) dan karenanya masih digunakan dalam VBA. Ini memungkinkan eksekusi yang lebih kompak dengan mengorbankan eksekusi lebih lambat. Mengapa saya berbicara tentang kode-p? Karena kadang-kadang rusak antara beberapa eksekusi dan file besar atau hanya karena instalasi perangkat lunak (Excel) rusak di suatu tempat. Ketika p-code rusak. eksekusi kode terus terganggu. Larutan: Dalam kasus ini, diasumsikan bahwa kode Anda sudah mulai rusak dan kemungkinan di masa depan adalah bahwa buku kerja Excel Anda juga akan rusak memberi Anda pesan seperti "file excel rusak dan tidak dapat dibuka". Karenanya, sebagai solusi cepat, Anda dapat mengandalkan jawaban # 1 atau jawaban # 2 sesuai kebutuhan Anda. Namun, jangan pernah abaikan tanda-tanda korupsi. Lebih baik menyalin modul kode Anda di notepad, menghapus modul, menyimpan & menutup buku kerja, tutup excel. Sekarang, buka kembali buku kerja dan mulai membuat modul baru dengan kode yang disalin sebelumnya ke notepad.

  2. Pengguna Mac, coba salah satu opsi di bawah ini dan dari mereka pasti akan bekerja tergantung pada arsitektur sistem Anda yaitu OS dan versi Office

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc+ Esc(Tekan dua kali berturut-turut)

Anda akan dimasukkan ke mode istirahat menggunakan kombinasi tombol di atas karena eksekusi makro menangguhkan segera menyelesaikan tugas saat ini. Ini adalah penggantian Langkah 2.

  1. Solusi: Untuk mengatasi batasan menggunakan jawaban # 1 dan jawaban # 2 , saya menggunakan xlErrorHandlerbersama dengan Resumepernyataan di Penangan Kesalahan jika kode kesalahan adalah 18. Kemudian, interupsi dikirim ke prosedur yang sedang berjalan sebagai kesalahan, dapat dijebak oleh kesalahan handler diatur dengan pernyataan On Error GoTo. Kode kesalahan trappable adalah 18. Prosedur saat ini terputus, dan pengguna dapat men-debug atau mengakhiri prosedur. Microsoft memberi peringatan bahwa jangan gunakan ini jika penangan kesalahan Anda memiliki melanjutkan pernyataan lain penangan kesalahan Anda selalu kembali ke pernyataan yang sama. Itulah tepatnya yang kita inginkan dalam gangguan yang tidak diinginkan dari eksekusi kode.

jainashish
sumber
0

Reputasi saya saat ini belum mengizinkan untuk memposting ini sebagai komentar. Stans solusi untuk masuk ke mode debug, tekan dua kali Ctrl + Break, mainkan, save memang menyelesaikan masalah saya, tapi saya punya dua tikungan tak terduga:

  1. Struture proyek saya dilindungi kata sandi, jadi untuk masuk ke Mode Debug saya harus masuk ke mode Pengembang, klik pada struktur proyek dan masukkan kata sandi.

  2. Proyek saya adalah file templat (.xmtl). Saya membuka file melalui klik ganda yang membukanya sebagai .xml dengan "1" di akhir nama file sebelumnya. Saya memperbaiki bug sebagai dengan instruksi Stans dan menyimpannya sebagai ... 1.xml file. Ketika saya kemudian membuka templat lagi, kali ini sebagai templat, dan ingin menerapkan perbaikan bug yang sama ke file itu, bug itu hilang! Saya tidak mengubah file ini dan masih tidak ada bug saat menjalankan Makro. Ini berarti bagi saya bahwa bug sebenarnya tidak ada dalam file, tetapi dalam pengaturan (tersembunyi) di Excel.

blablubbb
sumber
-1

Masalahnya sekarang tampaknya berkaitan dengan Excel itu sendiri

Instal ulang dan tambal itu :) Selain itu sulit untuk mengatakannya.

Andy
sumber
Kami mencoba menginstal ulang, meskipun pengguna 'lupa' untuk reboot setelah orang yang mendukung melakukan tugasnya. Saya mencoba untuk menghindari instal ulang Office yang lain, tetapi ini mungkin tidak terhindarkan ... Terima kasih
Phil Whittington