Ứng dụng Excel VBA dừng tự phát với thông báo Việc thực thi mã Mã đã bị tạm dừng


150

Từ những gì tôi có thể thấy trên web, đây là một khiếu nại khá phổ biến, nhưng câu trả lời dường như hiếm hơn. Vấn đề là đây:

Chúng tôi có một số ứng dụng VBA Excel hoạt động hoàn hảo trên một số máy của người dùng. Tuy nhiên trên một máy họ dừng trên một số dòng mã nhất định. Nó luôn luôn là cùng một dòng, nhưng những dòng đó dường như không có gì chung với nhau.

Nếu bạn nhấn F5 (chạy) sau khi tạm dừng, ứng dụng sẽ tiếp tục, do đó, nó gần giống như một điểm dừng đã được thêm vào. Chúng tôi đã thử chọn 'xóa tất cả các dấu ngắt' khỏi menu và thậm chí thêm dấu ngắt và xóa lại.

Chúng tôi đã gặp vấn đề này với các ứng dụng duy nhất trước đây và chúng tôi đã 'khắc phục' bằng cách cắt mã ra khỏi các mô-đun, biên dịch và sau đó dán lại.

Vấn đề bây giờ dường như liên quan đến chính Excel chứ không phải là một .xls duy nhất, vì vậy chúng tôi không chắc chắn cách quản lý vấn đề này.

Bất kỳ sự trợ giúp sẽ nhận được lòng với biết ơn :)

Cảm ơn,

Philip Whittington


2
Là người dùng nhấn thoát ở giữa bất kỳ xử lý? Hoặc bất kỳ ứng dụng nào khác đang gửi chìa khóa thoát?
shahkalpesh

1
Sau khi chọn Xóa tất cả các Điểm dừng , bạn cũng đã biên dịch lại và lưu dự án VBA? Tôi đã thấy một vấn đề liên quan trong Word VBA, nơi các điểm dừng bị loại bỏ trước đó vẫn đang gây ra sự cố.
Dirk Vollmar

Không có gì đang được xử lý trong khi thực hiện, shahkalpesh. Divo - cảm ơn, tôi có thể đã không thử chúng chính xác theo thứ tự đó. Sẽ làm như vậy ngay bây giờ ...
Phil Whittington

Ngoài nhận xét của divo, có thể hữu ích để nhận xét các dòng có liên quan và bất kỳ dòng nào có thể dừng gỡ lỗi, sau đó chúng có thể không bị xóa và mã được biên dịch lại (một lần nữa).
Fionn mộng

Và tôi đã quên đề cập: Để thực sự kích hoạt xây dựng lại, thông thường cần phải sửa đổi một dòng, sau đó di chuyển con trỏ sang dòng tiếp theo để gắn cờ mã nguồn như đã sửa đổi (ví dụ: thay đổi, di chuyển con trỏ xuống, di chuyển đưa con trỏ lên và hoàn tác thay đổi bằng tay)
Dirk Vollmar

Câu trả lời:


405

Tôi đã tìm thấy một giải pháp thứ 2.

  1. Nhấn nút "Gỡ lỗi" trong cửa sổ bật lên.
  2. Nhấn Ctrl+ Pause|Breakhai lần.
  3. Nhấn nút play để tiếp tục.
  4. Lưu tập tin sau khi hoàn thành.

Hy vọng điều này sẽ giúp được ai đó.


12
+1: Wow, bài đăng này đã cứu tôi khỏi một thế giới đau khổ. Một giải pháp rất bất ngờ cho một vấn đề kỳ quái. Sau khi nhấn [Ctrl + Break] hai lần và tiếp tục, tôi đã lưu tệp. Sau đó, vấn đề không còn xuất hiện khi tôi đóng và mở lại tệp.
dbenham

28
Nếu có một câu trả lời xứng đáng với một upvote, đây là nó. Câu trả lời chính xác.
The_Barman

4
Điều này đã giúp tôi rất nhiều. Câu trả lời này xứng đáng 1000 upvote. Tôi đã lo lắng về vấn đề này trong 4-5 ngày qua. Điều này làm việc hoàn hảo.
demouser123

25
Có ai biết tại sao điều này làm việc? Hay nó đến từ đâu? Đây có phải là phép thuật không?
ZX9

4
Vẫn giúp tôi trong năm 2017. Cảm ơn bạn!
Tấm

16

Vấn đề này xuất phát từ một vấn đề lạ trong Office / Windows.

Sau khi phát triển cùng một đoạn mã VBA và chạy nó hàng trăm lần (theo nghĩa đen) trong vài ngày qua, tôi đã gặp phải vấn đề này ngay bây giờ. Điều duy nhất khác biệt là ngay trước khi gặp sự cố rắc rối này, tôi đã vô tình kết thúc việc thực thi mã VBA bằng một phương thức không chính thống.

Tôi đã dọn sạch tất cả các tệp tạm thời, khởi động lại, v.v ... Khi tôi chạy lại mã sau tất cả những điều này tôi vẫn gặp sự cố - trước khi tôi vào vòng lặp đầu tiên. Điều này có nghĩa là "nhấn nút" Gỡ lỗi "trong cửa sổ bật lên, sau đó nhấn hai lần [Ctrl + Break] và sau đó có thể tiếp tục mà không dừng lại" bởi vì một cái gì đó trong sự kết hợp của Office / Windows đã không phát hành thực thi. Nó bị kẹt.

Hành động Ctrl + Break dự phòng có thể giải quyết việc thực hiện kéo dài.


14

Một giải pháp là đây :

Giải pháp cho vấn đề này là thêm dòng mã Ứng dụng.Enable-12 việc thực hiện đã bị gián đoạn.

Nhưng, sau khi tôi chèn dòng mã này, tôi không thể sử dụng Ctrl + Break nữa. Vì vậy, nó hoạt động nhưng không nhiều.


Cảm ơn, Stan - đó chắc chắn là một giải pháp nếu bạn chịu áp lực thời gian và chỉ muốn nó chạy! Rất hữu ích.
Phil Whittington

1
Bạn có thể kích hoạt lại trong cùng một thực thi bằng cách đặt nó thành xlInterrupt. (Nó cũng tự động bật lại khi quá trình thực thi mã kết thúc.) Câu trả lời khác của bạn có hiệu quả với tôi, nhưng trường hợp xấu nhất có thể được sử dụng như một cách khắc phục tạm thời. Thêm thông tin về Ứng
dụng.Enable HủyKey

2
Câu trả lời đúng - và câu trả lời đúng duy nhất - ở trên. Chèn bất kỳ dòng mã nào, bao gồm cả Application Application.Enable HủyKey = xlDisables, chỉ đơn thuần là chuyển vấn đề sang dòng khác. Thông thường, 'điểm dừng' mới chính xác là dòng bạn đã chèn. Lý do duy nhất tôi không hạ thấp câu trả lời của bạn là tôi đã dùng đến việc sử dụng nó nhiều lần, trong thập kỷ qua.
Nigel Heffernan

6

Tôi thấy việc nhấn ctrl + break trong khi macro không chạy đã khắc phục sự cố.


3

Tôi sẽ thử các cách khắc phục thông thường: - Chạy Trình dọn dẹp mã VBA của Rob Bove trên Mã VBA của bạn - xóa tất cả các bổ trợ trên PC của người dùng, đặc biệt là các bổ trợ COM và .NET - Xóa tất cả các tệp .EXD của người dùng (Cập nhật MSoft không tương thích) - Chạy Excel Phát hiện & Sửa chữa trên hệ thống người dùng - kiểm tra kích thước tệp .xlb của người dùng (nên là 20-30K) - Khởi động lại sau đó xóa tất cả các tệp Temp của người dùng


2

Cảm ơn sự đóng góp của mọi người. Vấn đề này đã được giải quyết bằng cách chọn REPAIR trong Bảng điều khiển. Tôi đoán điều này rõ ràng đăng ký lại một số thành phần COM gốc của Office và thực hiện những thứ mà REINSTALL không có. Tôi hy vọng cái sau chỉ đi qua một danh sách kiểm tra và đôi khi chấp nhận những gì ở đó nếu nó đã được cài đặt, có thể. Sau đó, tôi đã có một vấn đề riêng với việc đăng ký .NET dll của riêng tôi cho COM interop trên máy của người dùng (mặc dù điều này cũng hoạt động trên các máy khác) mặc dù tôi nghĩ rằng đây là lỗi của tôi chứ không phải Microsoft. Cảm ơn một lần nữa, tôi thực sự đánh giá cao nó.


2

Tôi đã gặp vấn đề này vài lần trong quá trình phát triển một ứng dụng VBA Excel phức tạp. Đôi khi Excel bắt đầu phá vỡ đối tượng VBA khá ngẫu nhiên. Và biện pháp khắc phục duy nhất là khởi động lại máy. Sau khi khởi động lại, Excel thường bắt đầu hoạt động bình thường.

Ngay sau đó tôi đã phát hiện ra rằng giải pháp khả thi cho vấn đề này là nhấn CTRL + Break một lần khi macro KHÔNG chạy. Có lẽ điều này có thể giúp bạn quá.


2

Tôi cũng gặp vấn đề này khi sử dụng excel 2007 với sổ làm việc foobar.xlsm (bật macro), điều này sẽ khiến "Mã thực thi bị gián đoạn" chỉ bằng cách cố gắng đóng sổ làm việc trên X màu đỏ ở góc bên phải không có macro chạy tất cả hoặc bất kỳ biểu mẫu "khởi tạo", sổ làm việc hoặc macro bảng tính nào. Các tùy chọn tôi nhận được là "Kết thúc" hoặc "Tiếp tục", Debug luôn bị mờ đi. Tôi đã làm như một poster trước đó đề xuất Bảng điều khiển-> Chương trình và Tính năng-> nhấp chuột phải vào "Microsoft Office Proffesional 2007" (trong trường hợp của tôi) -> thay đổi-> sửa chữa.

Điều này giải quyết vấn đề cho tôi. Tôi có thể thêm điều này xảy ra ngay sau khi cập nhật MS và tôi cũng tìm thấy một addin trong Excel có tên là "Team Foundation" từ Microsoft mà tôi chắc chắn không cài đặt một cách tự nguyện


1

Tôi muốn thêm chi tiết vào câu trả lời số 2 của Stan vì những lý do dưới đây:

  • Tôi đã phải đối mặt với vấn đề này hơn chục lần và tùy thuộc vào điều kiện dự án, tôi đã chọn giữa câu trả lời kỳ diệu của stan's # 1 hoặc # 2. Khi tôi tiếp tục đối mặt với nó một lần nữa, tôi trở nên thắc mắc hơn rằng tại sao nó lại xảy ra ở nơi đầu tiên.

  • Tôi cũng muốn thêm câu trả lời cho người dùng Mac.

  • Có những hạn chế với cả hai câu trả lời có thể có này:

    • nếu mã được bảo vệ (và bạn không biết mật khẩu) thì câu trả lời số 1 sẽ không giúp ích.
    • nếu mã không được bảo vệ thì câu trả lời # 2 sẽ không cho phép bạn gỡ lỗi mã.

  1. Nó có thể xảy ra do bất kỳ lý do nào dưới đây:

    • Hệ điều hành không phân bổ tài nguyên hệ thống cho quy trình Excel. ( Giải pháp: Một người chỉ cần khởi động hệ điều hành - tỷ lệ thành công rất thấp nhưng đã biết làm việc nhiều lần)

    • Mã P là mã trung gian đã được sử dụng trong Visual Basic (trước .NET) và do đó nó vẫn được sử dụng trong VBA. Nó cho phép thực thi nhỏ gọn hơn với chi phí thực hiện chậm hơn. Tại sao tôi nói về mã p? Bởi vì đôi khi nó bị hỏng giữa nhiều lần thực thi và các tệp lớn hoặc do cài đặt phần mềm (Excel) bị hỏng ở đâu đó. Khi mã p bị hỏng. việc thực thi mã tiếp tục bị gián đoạn.Giải pháp: Trong những trường hợp này, giả định rằng mã của bạn đã bắt đầu bị hỏng và trong tương lai, sổ làm việc Excel của bạn cũng bị hỏng khi cung cấp cho bạn các thông báo như "tệp excel bị hỏng và không thể mở được". Do đó, như một giải pháp nhanh chóng, bạn có thể dựa vào câu trả lời số 1 hoặc câu trả lời số 2 theo yêu cầu của bạn. Tuy nhiên, đừng bao giờ bỏ qua các dấu hiệu tham nhũng. Tốt hơn là sao chép các mô-đun mã của bạn trong notepad, xóa các mô-đun, lưu và đóng sổ làm việc, đóng excel. Bây giờ, hãy mở lại sổ làm việc và bắt đầu tạo các mô-đun mới với mã được sao chép trước đó vào notepad.

  2. Người dùng Mac, hãy thử bất kỳ tùy chọn nào dưới đây và chúng chắc chắn sẽ hoạt động tùy thuộc vào kiến ​​trúc hệ thống của bạn, ví dụ như phiên bản OS và Office

    • Ctrl + Pause
    • Ctrl + ScrLk
    • Esc+ Esc(Bấm hai lần liên tiếp)

Bạn sẽ được đưa vào chế độ ngắt bằng cách sử dụng các tổ hợp phím trên vì macro tạm dừng thực thi ngay lập tức hoàn thành nhiệm vụ hiện tại. Đây là sự thay thế của Bước 2.

  1. Giải pháp: Để khắc phục giới hạn của việc sử dụng câu trả lời số 1câu trả lời số 2 , tôi sử dụng xlErrorHandlercùng với Resumecâu lệnh trong Trình xử lý lỗi nếu mã lỗi là 18. Sau đó, ngắt được gửi đến quy trình đang chạy như một lỗi, có thể bị lỗi do lỗi trình xử lý được thiết lập với câu lệnh On Error GoTo. Mã lỗi có thể theo dõi là 18. Quy trình hiện tại bị gián đoạn và người dùng có thể gỡ lỗi hoặc kết thúc quy trình. Microsoft cảnh báo rằng không sử dụng điều này nếu trình xử lý lỗi của bạn có câu lệnh tiếp tục khác, trình xử lý lỗi của bạn luôn trở về cùng một câu lệnh. Đó chính xác là chúng tôi muốn trong sự gián đoạn vô nghĩa không mong muốn của việc thực thi mã.


0

Danh tiếng hiện tại của tôi chưa cho phép đăng bài này như một bình luận. Giải pháp Stans để vào chế độ gỡ lỗi, nhấn hai lần Ctrl + Break, bật, lưu đã giải quyết vấn đề của tôi, nhưng tôi có hai vòng xoắn bất ngờ:

  1. Cấu trúc dự án của tôi được bảo vệ bằng mật khẩu, vì vậy để vào Chế độ gỡ lỗi, trước tiên tôi phải vào chế độ Nhà phát triển, nhấp vào cấu trúc dự án và nhập mật khẩu.

  2. Dự án của tôi là một tệp mẫu (.xmtl). Tôi đã mở tệp bằng cách nhấp đúp để mở tệp dưới dạng .xml với "1" ở cuối tên tệp trước đó. Tôi đã sửa lỗi theo hướng dẫn của Stans và lưu nó dưới dạng ... tệp 1.xml. Sau đó, khi tôi mở lại mẫu, lần này là mẫu và muốn áp dụng cùng một sửa lỗi cho tệp đó, lỗi đã biến mất! Tôi đã không thay đổi tệp này và vẫn không có lỗi khi thực hiện Macro. Điều này có nghĩa với tôi rằng lỗi không thực sự có trong tệp, mà là trong cài đặt (ẩn) trong Excel.


-1

Vấn đề bây giờ dường như liên quan đến chính Excel

Cài đặt lại và vá nó lên :) Khác thì thật khó để nói.


Chúng tôi đã thử cài đặt lại, mặc dù người dùng 'quên' khởi động lại sau khi anh chàng hỗ trợ làm việc của mình. Đang cố gắng tránh cài đặt lại Office khác, nhưng điều này có thể không thể tránh khỏi ... Cảm ơn
Phil Whittington
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.