Dùng code nào để biết excel đang mở là read-only? (1 người xem)

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Tại máy A: file excel XY đang mở
Tại máy B: một người mở file excel XY ra.

Khi đó file excel tại máy B sẽ có trạng thái là Read-Only


Em xin được hỏi dùng code nào đẻ tại máy B để xác định file XY là Read-Only

ý đồ của em là để làm việc sau vi du:
PHP:
If not read-only then
Thisworkbook.save

Esle:
Thisworkbook.save = false ' khi tat file XY mo o che do Read Only minh chon button cancel

End if
 
Bạn thử code này:
Mã:
Sub TestReadonly() 
     
    Dim strFullFilename As String 
     
    strFullFilename = "C:\temp\readonly.xls" 
     
    If (GetAttr(strFullFilename) And vbReadOnly) = 1 Then 
         MsgBox strFullFilename & " Is readonly" 
    Else 
        MsgBox strFullFilename & " Is NOT readonly" 
    End If 
End Sub

LVD
 
Upvote 0
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    Dim strFullFilename As String
     
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
     
    If (GetAttr(strFullFilename) And vbReadOnly) = 1 Then
         MsgBox strFullFilename & " Is readonly"
         ThisWorkbook.Save = False  '--> doan code nay bi sai sua nhu nao Anh oi
    Else
        MsgBox strFullFilename & " Is NOT readonly"
        ThisWorkbook.Save
    End If
End Sub

Kính gửi ANh Duyệt
Em biết thêm một hàm mới GetAttr

Em vừa sửa lại để áp dụng vào file của em được rồi anh ạh
tuy nhiên nếu là Read-only, em muốn khi tắt excel không hỏi han gì cả (save, không save, cancel)
Em muốn khi excel đang mở là read-only --> khi tắt đi nó mặc định là No luôn



Cám ơn Anh
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    Dim strFullFilename As String
     
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
     
    If (GetAttr(strFullFilename) And vbReadOnly) = 1 Then
         MsgBox strFullFilename & " Is readonly"
         ThisWorkbook.Save = False  '--> doan code nay bi sai sua nhu nao Anh oi
    Else
        MsgBox strFullFilename & " Is NOT readonly"
        ThisWorkbook.Save
    End If
End Sub
Kính gửi ANh Duyệt
Em biết thêm một hàm mới GetAttr

Em vừa sửa lại để áp dụng vào file của em được rồi anh ạh
tuy nhiên nếu là Read-only, em muốn khi tắt excel không hỏi han gì cả (save, không save, cancel)
Em muốn khi excel đang mở là read-only --> khi tắt đi nó mặc định là No luôn



Cám ơn Anh
Bạn thử sửa lại thành:
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
    Dim strFullFilename As String
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
    ThisWorkbook.Save((GetAttr(strFullFilename) And vbReadOnly) <> 1)
End Sub
Không chắc lắm vì không có điều kiện test
 
Upvote 0
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
    Dim strFullFilename As String
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
    ThisWorkbook.Save((GetAttr(strFullFilename) And vbReadOnly) <> 1)
End Sub

Bị lỗi Thầy ơi

Hình như sau Thisworkbook.save không có gì cả

ý em muốn có đoạn code nào kiểu như này không?
PHP:
Thisworkbook.unsave

Hic, mỗi tội .unsave không có
 
Upvote 0
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
    Dim strFullFilename As String
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
    ThisWorkbook.Save((GetAttr(strFullFilename) And vbReadOnly) <> 1)
End Sub
Bị lỗi Thầy ơi

Hình như sau Thisworkbook.save không có gì cả

ý em muốn có đoạn code nào kiểu như này không?
PHP:
Thisworkbook.unsave
Hic, mỗi tội .unsave không có
Sorry! Tôi nhầm... Sửa chữ Save thành Close là được rồi
Thisworkbook.Close(True) nghĩa là đóng và lưu
Thisworkbook.Close(False) nghĩa là đóng và không lưu
Hoặc có thể viết theo kiểu:
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If cái gì đó... then
    Cancel= True
  Else
   Thisworkbook.Save
End Sub
Cách này sẽ cấm lưu
Có lẽ hay nhất nên dùng:
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
    Dim strFullFilename As String
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
    ThisWorkbook.Close((GetAttr(strFullFilename) And vbReadOnly) <> 1)
End Sub
Bạn thử lại lần nữa xem!
 
Lần chỉnh sửa cuối:
Upvote 0
Thưa Thầy

Mình có thể viết gọn như này được không?
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    Dim strFullFilename As String
     
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
     
    ThisWorkbook.Close (GetAttr(strFullFilename) <> 1)
    
    
    
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Thưa Thầy

Mình có thể viết gọn như này được không?
PHP:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
     
    Dim strFullFilename As String
     
    strFullFilename = "\\Klvhph-acc\osf\DS SEA PHAT HANH TREN HD 09.xlsm"
     
    ThisWorkbook.Close (GetAttr(strFullFilename) <> 1)
    
    
    
End Sub
Bạn cứ thử.. tôi không chắc lắm ---> Vì nhìn code và dựa trên lý thuyết thì nó hoàn toàn hợp lý... tuy nhiên khi thí nghiệm lại có lúc không đúng!
Nói chung: Thí nghiệm để tìm chân lý là điều cần thiết!
 
Upvote 0
Có lẽ cả 2 cách viết trên đều không được Thầy ạh

Em đã thử trong Immediate dù là Normal hay Readonly thì
- ?Getattr() = 32
- ?VbReadOnly = 1

Hic
 
Upvote 0
Có lẽ cả 2 cách viết trên đều không được Thầy ạh

Em đã thử trong Immediate dù là Normal hay Readonly thì
- ?Getattr() = 32
- ?VbReadOnly = 1

Hic
Có lẽ có sự phân biệt về ReadOnly giữa file nằm trên máy tính (được set thuộc tính ReadOnly) và 1 tập tin mạng (vì người mở file sau bị đưa vào "thế" ReadOnly) ---> Nhớ không lầm thì đã có 1 bạn hỏi 1 câu gần tương tự trên diển đàn này (về tập tin mạng) và không có giải pháp! +-+-+-+
 
Upvote 0
Có lẽ có sự phân biệt về ReadOnly giữa file nằm trên máy tính (được set thuộc tính ReadOnly) và 1 tập tin mạng (vì người mở file sau bị đưa vào "thế" ReadOnly) ---> Nhớ không lầm thì đã có 1 bạn hỏi 1 câu gần tương tự trên diển đàn này (về tập tin mạng) và không có giải pháp! +-+-+-+

Lần đầu tiên em hỏi Thầy ơi
 
Upvote 0
Web KT

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

Back
Top Bottom