Dùng VBA Excel kiểm tra một file Word là đang mở hay không?

tuhocvba

Administrator
Thành viên BQT
Mục đích ban đầu là như tiêu đề topic này.
Từ mục đích đó mình tìm được một đoạn code (xin lỗi không nhớ lấy từ đâu).
Ban đầu thấy nó chạy khá ổn, mình chèn thêm hàm Msgbox để báo tên file word đang mở, thấy nó chạy khá ổn.

Hiện tại, mình muốn cứ có bất cứ file word nào đang mở, nói cách khác là ứng dụng Microsoft Word đang bật, thì ra thông báo cho mình biết.
Vậy mà lại không chạy. Trong khi code thì chả nhìn thấy điểm nào sai.
Mời các bạn trao đổi.
Mã:
Sub FileInWdOpen()

    Dim wd      As Word.Application
    Dim s       As String
    

    On Error Resume Next
    Set wd = GetObject(, "Word.Application")
    On Error GoTo NO_WORD_FOUND

    If wd Is Nothing Then
        MsgBox "OK"
    End If

    If wd.Documents.Count > 0 Then
        MsgBox "Hay close word"
    End If
    MsgBox "OK"

    Exit Sub

NO_WORD_FOUND:

    MsgBox "OK"

End Sub
 
D

Deleted member 208

Guest
Em chạy code cả chục lần. Nếu đang mở một file word nào đó thì rõ ràng hiện thống báo Hay close word. Nếu tắt tất cả các file word thì chỉ còn thông báo OK.
Em nghĩ bug ở trên thuôc vào trường hợp tùy từng máy tính, thậm chí tùy từng thời điểm, mà ra bug hay là không. Đây là trường hợp khó chữa nhất. Vì lỗi xuất hiện không ổn định nên tìm nguyên nhân không dễ dàng.
 
  • Like
Reactions: CRV

CRV

SMod
Thành viên BQT
@tuhocvba
Bạn thử thực hiện theo cách sau,

Cách 1: Thay:
Mã:
Dim wd      As Word.Application
thành:
Mã:
Dim wd As Object
Cách 2:
Khai báo:
Mã:
Dim wd As New Word.Application
Trong Tools | References chọn:
Bạn cần đăng nhập để thấy đính kèm


Kết quả chạy code:

Bạn cần đăng nhập để thấy đính kèm


Mã:
Option Explicit
Sub FileInWdOpen()
    Dim wd As New Word.Application
    'Dim wd As Object
    Dim s As String, iO As Integer, i As Integer
'    On Error Resume Next
    Set wd = GetObject(, "Word.Application")
'    On Error GoTo NO_WORD_FOUND
    If wd Is Nothing Then
        MsgBox "OK"
    End If
    iO = wd.Documents.Count
    If iO > 0 Then
        For i = 1 To iO
            s = s & vbNewLine & wd.Documents(i)
        Next i
        If Len(s) > 0 Then
            MsgBox "Hay dong " & iO & " tin word dang mo co ten:" & s
        End If
    End If
    
    Exit Sub
    
NO_WORD_FOUND:
    MsgBox "OK"

End Sub
 

Euler

Administrator
Thành viên BQT
Coi code ở #1, chạy vài lần toàn thấy đúng. Nên không biết là sai ở đâu.
 
Top