Cách xác định trạng thái chỉ đọc file .xls

  • Thread starter Thread starter nplvn
  • Ngày gửi Ngày gửi
Liên hệ QC

nplvn

Thành viên mới
Tham gia
9/5/08
Bài viết
32
Được thích
24
Mấy Huynh cho hỏi, trong VBA có cách nào xác định 1 file .xls đang là chỉ đọc không (Do hai người trong mạng Lan cùng mở), Xin mấy Huynh giúp đỡ. Cảm ơn

Mấy Huynh chỉ giúp với, không lẻ không thế xác định được bằng VBA là file đó đang ở trạng thái chỉ đọc hay không à . Nhờ mấy huynh giúp đỡ
 
Chỉnh sửa lần cuối bởi điều hành viên:
-Muốn xác định trạng thái của file, trong VBA ta dùng hàm GetAttr(path)
-Code xác định trạng thái ReadOnly của 1 file excel ( dù file này ở dạng ẩn):
Mã:
Sub GetATT1()
Dim stenFile As String, sKetqua As String, sThumuc As String
Dim ichiso As Integer
sThumuc = "C:\"
stenFile = Dir("C:\test.xls", 2)
ichiso = GetAttr(sThumuc & stenFile)
  If ichiso = 1 Or ichiso = 3 Then
      Result = stenFile
  End If
  If Result = "" Then
      MsgBox "Khong tim thay."
  Else
      MsgBox Result, , "File ReadOnly. "
  End If
End Sub
-Code xác định trạng thái ReadOnly của nhiều file excel ( dù các file này ở dạng ẩn):
Mã:
Sub GetATT2()
Dim stenFile As String, sKetqua As String, sThumuc As String
Dim ichiso As Integer
sThumuc = "C:\"
stenFile = Dir("C:\*.xls", 2)
     Do While Len(stenFile) > 0
        ichiso = GetAttr(sThumuc & stenFile)
           If ichiso = 1 Or ichiso = 3 Then
              Result = Result & Chr(13) & stenFile
           End If
        stenFile = Dir()
     Loop
     If Result = "" Then
         MsgBox "Khong tim thay."
     Else
         MsgBox Result, , "Danh sach file tim thay. "
     End If
End Sub
 
Upvote 0
Cảm ơn bạn voda, để mình copy đoạn code rồi làm thử. Chân thành cảm ơn!
 
Upvote 0
Voda xin cho mình hỏi thêm tí, có lẽ mình nói không rõ nên chép đoạn code này về mà làm không được. Ý của mình là có 1 file *.xls sử dụng trong mạng nội bộ (mạng Lan) dùng để nhập liệu thông tin khách hàng và lấy số thứ tự công trình (file đó có 1 from nhập liệu). Nhưng bị lỗi ở chổ nếu có 2 người cùng mở một lúc thì người mở sau sẽ không thể lấy số thứ tự được(vẫn nhập liệu bình thường nhưng không save được). Vì vậy mình muốn nếu người nào mở sau lúc đó file sẽ readonly thì mình thêm đoạn macro sẽ tự động đóng file đó lại đến khi nào người kia nhập xong thì người sau mới lấy số thứ tự được.
 
Upvote 0
Bản thân File không thuộc dạng readonly, tuy nhiên do người dùng chung nên người dùng sau sẽ ở chế độ readonly (hoặc do cơ chế share, hoặc do cơ chế đặt pass, cơ chế open), chứ người dùng đầu tiên hoàn toàn không phải readonly

Hơn nữa khi chạy 1 File thì cái mà ta thấy chỉ là ánh xạ của File đó trong bộ nhớ (từ ánh xạ này có thể kill File gốc được)

Câu hỏi đề ra là : Làm sao biết được File đó có (ít nhất) một (hay hai . . ) người đang dùng, hay cụ thể hơn là trong đó có (ít nhất) một người đang dùng ở chế độ Readonly.

Thân!
 
Upvote 0
-Mình nghĩ hàm GetAttr không dùng được trong trường hợp này. Hàm này chỉ xác định thuộc tính của file trong Win( file/Properties/Attribues )chứ không kiểm tra được ở chế độ ReadOnly tạm thời của file.
-Phải tìm cách khác thôi.
 
Upvote 0
Bản thân File không thuộc dạng readonly, tuy nhiên do người dùng chung nên người dùng sau sẽ ở chế độ readonly (hoặc do cơ chế share, hoặc do cơ chế đặt pass, cơ chế open), chứ người dùng đầu tiên hoàn toàn không phải readonly

Hơn nữa khi chạy 1 File thì cái mà ta thấy chỉ là ánh xạ của File đó trong bộ nhớ (từ ánh xạ này có thể kill File gốc được)

Câu hỏi đề ra là : Làm sao biết được File đó có (ít nhất) một (hay hai . . ) người đang dùng, hay cụ thể hơn là trong đó có (ít nhất) một người đang dùng ở chế độ Readonly.

Thân!
Vâng, cảm ơn Mr Okebacd, vì không biết nên nói vậy. Bạn nói đúng rối, thế có đoạn code nào để biết được là file đó có ít nhất một người đang dùng ở chế độ Readonly. Giúp mình với.
 
Upvote 0
Vâng, cảm ơn Mr Okebacd, vì không biết nên nói vậy. Bạn nói đúng rối, thế có đoạn code nào để biết được là file đó có ít nhất một người đang dùng ở chế độ Readonly. Giúp mình với.

Mình phân tích ra như vậy thôi chứ mình nghĩ là . . . không có cách nào.

Thân!
 
Upvote 0
Ko biết dùng hàm GET.DOCUMENT(34) thì sao nhỉ? Đáng tiếc tôi đang ở máy đơn, ko có điều kiện kiểm tra vụ này!
 
Upvote 0
Hì, cuối cùng mình cũng phát hiện ra được 1 cách. Có lẽ là củ chuối nhưng cũng xin viết lên.
Chỉ cần viết đoạn code Auto_open lúc mở file lên sẽ dò giá trị hoặc (gì cũng được) tại cell nào đó nếu ="" thì mở file , rồi gán cho nó giá trị (hoặc gì đó) rồi save lại. Ngược lại thì thông báo và đóng file
Và Auto_close viết đoạn code xóa giá trị cell đó . Cảm ơn mọi người.
 
Upvote 0
Web KT

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

Back
Top Bottom