Tự động đóng chương trình soạn thảo VBA bằng VBA.

Liên hệ QC

VADaNang

Thành viên chính thức
Tham gia
4/12/06
Bài viết
65
Được thích
47
Để đóng chương trình soạn thảo VBA đang được mở tôi sử dụng lệnh sau:
Application.SendKeys "%{F11}", True
Application.SendKeys "%FC", True
hoặc Application.SendKeys "%Q", True (Lệnh nằm trong 1 file khác khi được mở)
Tuy nhiên tôi thấy có lúc hoạt động được có lúc không. Hỏi có cách nào khác để thực hiện vấn đề này không?
Xin cám ơn.
 
Khi thực hiện chương trình có báo lỗi gì không?
Bạn nên chèn lệnh Debug.Print để kiểm tra xem.

Lê Văn Duyệt
 
Dear levanduyet,
----------------
Em tưởng Debug.Print chỉ có ý nghĩa đối với thuộc tính thôi chứ nhỉ, mà vấn đề là "có lúc hoạt động được có lúc không" chứ không báo lỗi!
Em cũng mò nhưng mãi chưa được, không biết đối tượng VBE làm việc như thế nào để có thể Activate nó. Nhận xét rằng khi đóng một Windows nào bằng Alt+F4, Alt+F+C, Alt+Q, Alt+... (gì gì đó) thì Windows đó phải được Activate. Trường hợp "lúc hoạt động được có lúc không" cũng dễ hiểu bởi vì chúng ta sử dụng Sendkeys để áp dụng cho một tổ hợp ShortCut Key nào đó, nếu tổ hợp đó không tồn tại trên Windows hiện hành thì đương nhiên là không thực hiện được.
Vấn đề là cần xác lập được con trỏ (cusor) vào VBA để Close nó bằng Sendkeys.
Em lại tiếp tục ngâm cái cứu vậy!
 
Dear all,
--------
Một đoạn code khả thi:
Mã:
Dim ReturnValue, I
ReturnValue = Shell("CALC.EXE", 1)    [COLOR=darkgreen]' Run Calculator.
[/COLOR]AppActivate ReturnValue    [COLOR=darkgreen] ' Activate the Calculator[/COLOR].
For I = 1 To 100    [COLOR=darkgreen]' Set up counting loop.
[/COLOR]  SendKeys I & "{+}", True    [COLOR=darkgreen]' Send keystrokes to Calculator
[/COLOR]Next I   [COLOR=darkgreen]' to add each value of I.[/COLOR]
SendKeys "=", True   [COLOR=darkgreen]' Get grand total.
[/COLOR]SendKeys "%{F4}", True  [COLOR=darkgreen]  ' Send ALT+F4 to close Calculator.
[/COLOR]

Và đây là code cải tiến:

Mã:
Public Sub Me_Close()
AppActivate "Microsoft Visual Basic"
SendKeys "%{F4}", True
End Sub
 
Lần chỉnh sửa cuối:
Trước khi gán phím tắt cho một Window thì cần phải Active nó.
Vấn đề của Cường nói "Vấn đề là cần xác lập được con trỏ (cusor) vào VBA để Close nó bằng Sendkeys". Lấy Windows của worksheet làm gốc để thực hiện lệnh.

Trình tự như sau:

ActiveWorkbook.Activate
Application.SendKeys "%{F11}", True
Sendkeys....
........

Đây là cách không được an toàn lắm. Không an toàn là nó phụ thuộc vào Window được Active, nếu nhầm thì sao? Người ta hay dùng Sendkeys trong VB vì nó dễ dùng.

Lập trình "ngon" đảm bảo an toàn cho hệ thống người ta dùng hàm API SendMessage hoặc PostMessage cùng với thông điệp WM_KEYDOWN. Nhưng thôi vấn đề này lắm vấn đề.
 
Web KT

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

Back
Top Bottom