Cần giúp hủy lệnh VBA ở dòng thứ n vừa thực thi xong (Step Into nhảy đến dòng kế n+1) (1 người xem)

Người dùng đang xem chủ đề này

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
934
Được thích
240
Giới tính
Nam
Chào Quý vị và các bạn GPE!
Nhờ Quý vị và các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Khi mở 1 File Excel => Nhấn Alt + F11 (Mở cửa sổ VBA) => Kích kép vào Mudule cần chạy => Nhấn F8 (Để chạy Step Into) => Nhấn F8 từng dòng một từ trên xuống dưới (Mục đích để xem từng dòng lệnh VBA thực thi như thế nào).
Vấn đề đặt ra ở đây là:
- Vấn đề 1: Khi thực thi xong 1 dòng lệnh ở dòng thứ n (Mũi tên màu vàng sẽ nhảy đến dòng thứ n+1) thì làm thế nào để hủy lệnh ở dòng thứ n vừa thực thi xong? (Giống như làm xong 1 thao tác ở Excel, muốn hủy lệnh thao tác vừa xong thì nhấn Ctrl + z).
- Vấn đề 2: Cũng giống như vấn đề 1, nhưng khác ở chỗ là làm
thế nào để hủy 5 dòng lệnh ngay kế trên (Tức là hủy lệnh từ dòng n đến dòng thứ n - 5) vừa thực thi xong?
Mong Quý vị và các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Đề tài này có lẽ không cần File đính kèm. Tôi xài Excel 2003.
 
Mục đích của bạn là gì vậy?
nếu bạn muốn khôi phục các lệnh vừa thực hiện, tôi nghĩ là bạn có thể xài lệnh undo ở sau mỗi dòng lệnh
nhưng để kiểm tra xem code hoat động như thế nào, theo kinh nghiệm của tôi thì tôi xài msgbox kèm theo cái gì mình muốn kiểm tra
 
Upvote 0
Mục đích của bạn là gì vậy?
nếu bạn muốn khôi phục các lệnh vừa thực hiện, tôi nghĩ là bạn có thể xài lệnh undo ở sau mỗi dòng lệnh
nhưng để kiểm tra xem code hoat động như thế nào, theo kinh nghiệm của tôi thì tôi xài msgbox kèm theo cái gì mình muốn kiểm tra
Lệnh application.undo không undo được VBA đâu bác, nó tương đương với bấm nút undo trên bảng tính.
Nếu có ít lệnh có thể đặt breakpoint (bấm F9) ở lệnh thứ n rồi chạy lại từ đầu.
 
Upvote 0
Mục đích của bạn là gì vậy?
nếu bạn muốn khôi phục các lệnh vừa thực hiện, tôi nghĩ là bạn có thể xài lệnh undo ở sau mỗi dòng lệnh
nhưng để kiểm tra xem code hoat động như thế nào, theo kinh nghiệm của tôi thì tôi xài msgbox kèm theo cái gì mình muốn kiểm tra
Ah, tôi muốn quay lại thao tác vừa rồi để check lại ấy mà. Chứ Msgbox thì tôi biết mà.
 
Upvote 0
Lệnh application.undo không undo được VBA đâu bác, nó tương đương với bấm nút undo trên bảng tính.
Nếu có ít lệnh có thể đặt breakpoint (bấm F9) ở lệnh thứ n rồi chạy lại từ đầu.
Nếu như Quý vị nói như vậy thì phải out cửa sổ VBA và bảng tính Excel (Tất nhiên là không save) => Rồi vào lại File Excel => Vào cửa sổ VBA (Alt + F11) => Di chuột đến dòng thứ n => Nhấn F9 (Breakpoint) => Nhấn F8 (Step Into) => Chạy Macro => Tôi làm thao tác này suốt => Mất thời gian phết => Nhờ các vị cao thủ trên diễn đàn có phương án nào không => Không có cách nào chăng?
 
Upvote 0
Ah, tôi muốn quay lại thao tác vừa rồi để check lại ấy mà. Chứ Msgbox thì tôi biết mà.
Không undo được nhưng bạn có thể copy lệnh hiện hành đang có màu vàng xuống dưới rồi sửa lệnh hiện tại thành goto nhãn, đặt nhãn này ở trên lệnh thứ n-1 để thực hiện lại lệnh đó sau đó xóa lệnh goto đi.
 
Upvote 0
Không undo được nhưng bạn có thể copy lệnh hiện hành đang có màu vàng xuống dưới rồi sửa lệnh hiện tại thành goto nhãn, đặt nhãn này ở trên lệnh thứ n-1 để thực hiện lại lệnh đó sau đó xóa lệnh goto đi.
Tôi hiểu ý của Quý vị, nhưng mà như thế có khác gì tự tay bấm chuột vào mũi tên màu vàng (Drop And Drag) di chuyển mũi tên màu vàng (Step Into) ngược lại đến dòng n rồi thực hiện lại lệnh dòng thứ n?. Đó không phải là mong muốn của tôi Quý vị ơi, vì khi thực thi xong dòng lệnh thứ n thì trong bảng tính Excel đã làm thao tác tương ứng với lệnh dòng thứ n rồi ạ (Tôi muốn hủy thao tác này cơ, tương đương với Ctrl + z trong bảng tính Excel).
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi hiểu ý của Quý vị, nhưng mà như thế có khác gì tự tay bấm chuột vào mũi tên màu vàng (Drop And Drag) di chuyển mũi tên màu vàng (Step Into) ngược lại đến dòng n rồi thực hiện lại lệnh dòng thứ n?. Đó không phải là mong muốn của tôi Quý vị ơi, vì khi thực thi xong dòng lệnh thứ n thì trong bảng tính Excel đã làm thao tác tương ứng với lệnh dòng thứ n rồi ạ (Tôi muốn hủy thao tác này cơ, tương đương với Ctrl + z trong bảng tính Excel).
Các lệnh VBA không thể undo được bạn ạ. Tuy vậy bạn có thể đọc thêm bài này để xem thử có được không?
http://www.jkp-ads.com/articles/undowithvba00.asp
 
Lần chỉnh sửa cuối:
Upvote 0
Nhìn chung là không thể Undo trong VBA. Nếu có làm được thì cũng rối lắm.
Mà nếu có Undo thì chỉ Undo toàn bộ chứ không thể 1 vài dòng code được.

Để khắc phục điều này người viết code nên lưu 1 file dự phòng khi thử code.
Thường thì mọi người sẽ dùng MsgBox để kiểm tra các biến hay giá trị tạm trong quá trình chạy code. Nếu kết quả xuất ra màn hình như ý đồ thuật toán đang thực hiện thì xóa dòng code kiểm tra đó.
Nếu ta xử lý dữ liệu trên bộ nhớ máy tính thì khi gán dữ liệu xuống ta sẽ gán tạm vào chỗ nào đó. Nếu kết quả như mong đợi thì lúc đó ta sẽ gán dữ liệu xuống vùng đúng của nó.
 
Upvote 0
Nhìn chung là không thể Undo trong VBA. Nếu có làm được thì cũng rối lắm.
Mà nếu có Undo thì chỉ Undo toàn bộ chứ không thể 1 vài dòng code được.

Để khắc phục điều này người viết code nên lưu 1 file dự phòng khi thử code.
Thường thì mọi người sẽ dùng MsgBox để kiểm tra các biến hay giá trị tạm trong quá trình chạy code. Nếu kết quả xuất ra màn hình như ý đồ thuật toán đang thực hiện thì xóa dòng code kiểm tra đó.
Nếu ta xử lý dữ liệu trên bộ nhớ máy tính thì khi gán dữ liệu xuống ta sẽ gán tạm vào chỗ nào đó. Nếu kết quả như mong đợi thì lúc đó ta sẽ gán dữ liệu xuống vùng đúng của nó.
Dùng cửa sổ watch tiện hơn msgbox chứ bác, không ảnh hưởng gì tới code cả.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom