Xóa Immediate bằng code, sau đó Call 1 sub khác không được?

Liên hệ QC

cantl

!!! Giải thoát !!!
Tham gia
6/8/08
Bài viết
1,805
Được thích
1,153
Giới tính
Nam
Chào Các bác,
Em muốn xóa Immediate và call sub khác chạy ngay sau đó.

Nhưng đoạn mã VBA dưới nó không call được Sub zzz().

Các bác chỉ em cách để Call được ạ?
Mã:
Option Explicit

Sub zzz()
Dim i%, z%
i = 2
z = 4
For i = i To (i + 1) ^ z Step 1
Debug.Print i & " / " & z & " >>> " & (((i - 1) Mod z) + 1)
Next i
End Sub

Sub ClearImmediateWindow()
Application.VBE.Windows("Immediate").SetFocus
Application.SendKeys "^g^a{DEL}", True
Call zzz
Application.SendKeys "{NUMLOCK}", True
Application.SendKeys "{NUMLOCK}", True
Application.SendKeys "{F7}", True
End Sub
 
Thế cái gì đang SetFocus?
 
Upvote 0
Thế cái gì đang SetFocus?
Có hay không có dòng đấy mà F5 thì đúng ra là nó có Call Sub nhưng nó lại tiếp tục chạy lại SendKeys "^g^a{DEL}". Nên trống trơn.

Kết quả em muốn hiện ra:

1696487834445.png

nhưng mà F5 với Sub ClearImmediateWindow thì:
1696487864388.png
Nó có chớp 1 cái, nghĩa là nó đã Call nhưng lại xóa lại hoặc bị lỗi gì tự động xóa lại.
 
Upvote 0
Nhiều tình huống cửa sổ Immediate đóng thì liệu dòng code có bị lỗi??
 
Upvote 0
Có hay không có dòng đấy mà F5 thì đúng ra là nó có Call Sub nhưng nó lại tiếp tục chạy lại SendKeys "^g^a{DEL}". Nên trống trơn.

Kết quả em muốn hiện ra:



nhưng mà F5 với Sub ClearImmediateWindow thì:

Nó có chớp 1 cái, nghĩa là nó đã Call nhưng lại xóa lại hoặc bị lỗi gì tự động xóa lại.

Chỉ định chạy tới dòng lệnh nào thôi rồi dừng. Hoặc bấm F8 để chạy từng dòng lệnh.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhiều tình huống cửa sổ Immediate đóng thì liệu dòng code có bị lỗi??
Em thử đóng (hide) thì chạy nó sẽ hiện của sổ ra lại, không bị lỗi gì cả.
F8 từng dòng lệnh thì không bị chạy lại thao tác xóa bác ạ.

Nhưng F5 thì không được như thế.

Em có thể xóa Call zzz ra khỏi để chạy riêng, nhưng em muốn ghép chung lại như thế và không đúng ý muốn nên muốn hỏi về giải pháp khác.
Mục đích là Clear sạch rồi chạy Sub zzz.
 
Upvote 0
Test code thì chịu khó làm thủ công chứ có mất mát thời gian gì nhiều đâu nếu màn hình console nó không hỗ trợ xóa như các IDE khác như VSCode, IntelliJ...
Tôi thì cứ Ctr + All rồi Del thôi.
 
Upvote 0
@cantl

Tools VBAFastCode có nút kiểm thử mã, tự động xóa Immediate và chạy thủ tục, bác tham khảo thêm


1696491111628.png

Nếu thủ tục đang chọn không có tham số thì gọi trực tiếp
Nếu thủ tục đang chọn là một hàm có các optional, thì sẽ gọi với thủ tục tên tương ứng có đuôi _test.


Ví dụ dưới đây, nếu trỏ văn bản đang trong func1, nhấn nút sẽ kiểm thử func1, nếu trỏ văn bản trong func2, nhấn nút sẽ gọi func2_test
Mã:
Sub func1()
    Debug.print "func1"
End Sub

Private Sub func2_test()
   func2 1
End Sub
Sub func2(val1)
    Debug.print "func2: " val1
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Vậy thì phải nhét clear vào trong zzz chứ?
Em đã thử và chỉ chạy mỗi Sub zzz vẫn bị xóa sạch.
1696491395191.png
Cái này em định ghép vào chung, mà nó không chạy đúng ý nên khó hiểu quá. Chạy từng dòng được mà cả Sub thì không ra.
Tớ sẽ tìm thử trong này.
 
Upvote 0
Web KT

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

Back
Top Bottom