Thomas có một macro thực hiện các chức năng khác nhau tại các khoảng thời gian.

Một số chức năng đó không nên được thực hiện nếu một hộp thoại đang mở trên màn hình, vì cố gắng thực hiện chúng sẽ gây ra lỗi trong các chức năng. Anh ta tự hỏi liệu có cách nào đó, trong macro, để phát hiện xem một hộp thoại — bất kỳ hộp thoại nào — hiện đang mở. Thomas thà phát hiện hộp thoại đang mở hơn là xử lý lỗi đã tạo.

Có lẽ cách duy nhất để cố gắng làm điều này là sử dụng FindWindow, thực sự là một phần của Windows API. Mục đích của nó là truy xuất một xử lý đến một cửa sổ đang mở cụ thể. (Hộp thoại không là gì ngoài một cửa sổ đang mở và mỗi hộp thoại có một tên.) Cách tiếp cận này sẽ không cho bạn biết hộp thoại any có đang mở hay không, nhưng nó sẽ cho bạn biết hộp thoại specific có đang mở hay không.

Đây là một ví dụ nhanh cho thấy cách sử dụng hàm FindWindow:

Declare Function FindWindow Lib "user32" Alias "FindWindowA" _   (ByVal wClassName As Any, ByVal wWindowName As String) As Long

Sub testDialogOpen()

Dim wHandle As Long     Dim wName As String

wName = "Find and Replace"

wHandle = FindWindow(0&, wName)

If wHandle = 0 Then         MsgBox "Dialog window is not open"

Else         MsgBox "Dialog window is open"

End If End Sub

Lưu ý rằng hàm FindWindow cần được khai báo bên ngoài thủ tục VBA của bạn. Sau đó, trong thủ tục, bạn cần chỉ định tên của hộp thoại mà bạn muốn tìm hiểu. Đây là tên xuất hiện trên thanh tiêu đề của hộp thoại và hàm FindWindow không phân biệt chữ hoa chữ thường. Giá trị trả về cho FindWindow sẽ là một xử lý cho hộp thoại, nếu nó đang mở. Nếu nó không được mở, thì hàm trả về giá trị 0.

Cũng nên nhớ rằng hộp thoại có thể có hai loại: phương thức và không phương thức. Nếu một hộp thoại cụ thể là phương thức, thì hộp thoại đó phải bị loại bỏ trước khi có thể thực hiện bất kỳ hành động nào khác trên hệ thống. Bạn sẽ muốn thực hiện thử nghiệm rộng rãi với các hộp thoại tại thời điểm, vì bạn có thể nhận được hiệu suất khác nhau từ macro của mình tùy thuộc vào việc hộp thoại đang mở có phải là phương thức hay không.

_Lưu ý: _

Nếu bạn muốn biết cách sử dụng các macro được mô tả trên trang này (hoặc trên bất kỳ trang nào khác trên các trang WordTips), tôi đã chuẩn bị một trang đặc biệt bao gồm thông tin hữu ích.

WordTips là nguồn của bạn để đào tạo Microsoft Word hiệu quả về chi phí.

(Microsoft Word là phần mềm xử lý văn bản phổ biến nhất trên thế giới.) Mẹo này (12355) áp dụng cho Microsoft Word 97, 2000, 2002 và 2003. Bạn có thể tìm thấy phiên bản của mẹo này cho giao diện ribbon của Word (Word 2007 và sau này) tại đây: