Hạn chế số ngày sử dụng của File

Liên hệ QC

phuyen89

Thành viên tích cực
Tham gia
20/11/08
Bài viết
870
Được thích
336
Nghề nghiệp
Student
Trong nhung lần copy file.Em thấy có File cho sử dụng bao nhiêu ngày thôi.Do vậy em tự hỏi phải dùng Code như thế nào mà lại hạn chế số ngày sử dụng của File như vây.Em chỉ nói đến 1 cái File bình thường thôi,chứ không phải là phần mềm
 
Trong nhung lần copy file.Em thấy có File cho sử dụng bao nhiêu ngày thôi.Do vậy em tự hỏi phải dùng Code như thế nào mà lại hạn chế số ngày sử dụng của File như vây.Em chỉ nói đến 1 cái File bình thường thôi,chứ không phải là phần mềm
Bạn thử dùng code này
Mã:
Sub auto_open()
On Error Resume Next
Dim myDate As Date
Dim Ws As Worksheet
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
    myDate = Date
    If Sheets("Userlog").Range("a1").Value <= myDate Then [COLOR=darkgreen]'A1 là ngày kết thúc[/COLOR]        
        MsgBox "File nay khong mo duoc vi qua han su dung." & vbNewLine _
        & "Vui long goi dien thoai cho tui", vbExclamation, "Thong bao"
        ThisWorkbook.Close
    End If
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
 
End Sub

Xem thêm file nhé
 

File đính kèm

  • gioi han ngay mo.xls
    25 KB · Đọc: 517
Upvote 0
Bạn thử dùng code này
Mã:
Sub auto_open()
On Error Resume Next
Dim myDate As Date
Dim Ws As Worksheet
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
    myDate = Date
    If Sheets("Userlog").Range("a1").Value <= myDate Then [COLOR=darkgreen]'A1 là ngày kết thúc[/COLOR]        
        MsgBox "File nay khong mo duoc vi qua han su dung." & vbNewLine _
        & "Vui long goi dien thoai cho tui", vbExclamation, "Thong bao"
        ThisWorkbook.Close
    End If
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
 
End Sub
Xem thêm file nhé

Code này cũng khá thú vị, nhưng có lẽ áp dụng với người mới biết Excel (tôi nghĩ là vậy), chứ với các Sư phụ (như bạn) thì muốn mở ra mấy hồi phải không? (Ctrl+Break)
 
Upvote 0
Mình ví dụ 1 dạng đơn giản:

Mã:
Private Sub Workbook_Open()
ng = Day(Date)
th = Month(Date)
nam = Year(Date)
If ng > 1 And th > 5 And nam >= 2008 Then
        tb = "This program have any problems for used." + Chr(10) + Chr(13)
         tb = tb + "Please close and save avoid to lose data." + Chr(10) + Chr(13)
        tb = tb + "Sorry very much !"
MsgBox (tb)
ActiveWorkbook.Save
Application.Quit
End If
End Sub

Hạn chế của dang này là khi người ta đổi ngày hệ thống vẫn dùng được.
Minh tham gia 1 số cách (Trước đây mình cũng đã làm nay tìm lại không thấy), mình nêu ý tưởng bạn thử xem nhé:
Cách 1:Ta lấy ngày Create file từ thuộc tính của file, ngày này sửa không đơn giản. Mỗi khi mở file kiểm tra ngày hệ thống với ngày tạo file nếu quá hạn thì thông báo và thoát.

Cachs 2: Ta Hide 1 sheet để lưu giờ truy cạp và giờ thoát ra. Tổng thời gian lưu trên sheet này quá thời gian quy định thì thông báo và thoát.
 
Upvote 0
Cho mình hỏi 1 chút là với những máy mà các bạn không biết và luôn đặt ở chế độ bảo vệ ở mức cao (Sẽ không Enable Macro được)thì vẫn xem được chứ. Và họ xem ở chế độ Read only thôi.Vậy có cách nào triệt để hơn để người ta chỉ xem được vài lần không?
 
Upvote 0
]Hạn chế của dang này là khi người ta đổi ngày hệ thống vẫn dùng được.
.
Thêm 1 phương án phụ là đếm số lần mở file ----> Khi ấy code sẽ xét 2 trường hợp Date > Giới hạn hoặc Số lần mở file > giới hạn thì sẽ đóng file, thậm chí xóa file mất xác luôn (điều kiện nào đến trước thì lấy)
Nói chung chỉ là giải pháp chơi cho vui (dành cho người không biết)... Với Excel thì chúng ta đừng mơ mộng mấy vụ bảo mật chi cho mệt xác ---> Cứ thử nghĩ Windows của bác Bill do bao nhiêu nhân vật xuất chúng xây dựng nên? Họ viết code chắc không phải tầm thường, vậy mà còn bị cr@ck tè lè...
Hãy dành thời gian nghiên cứu những món khác nâng cao trình độ còn hay hơn!
 
Upvote 0
Mình không học lập trình ngày nào hết nhưng cũng đã "lượm lặt" chút đỉnh qua 1 năm tham gia giaiphapexcel.com.
Nhân đây mình cũng xin ké một giải pháp mà mình đang dùng.

Giải pháp mà mình dùng là viết code để file nhận biết số lần mở file cũng như số ngày mở file. Với code này bạn có thể tự đặt giới hạn số lần và giới hạn số ngày mở file.

Mã:
[COLOR=blue]Private Sub Workbook_Open()[/COLOR]
Range("[COLOR=red]Sheet1!A1[/COLOR]").Value = Range("Sheet1!A1").Value + 1                         'Dung de luu so lan mo file
If Range("[COLOR=red]Sheet1!A2[/COLOR]").Value = 1 Then
'Range("[COLOR=red]Sheet1!B2[/COLOR]").Value = DateSerial(Year(Now()), Month(Now()), Day(Now()))   'Chi ghi vao ngay, thang, nam thoi!
Range("[COLOR=red]Sheet1!B2[/COLOR]").Value = Now()                                                'Ghi day du thoi gian mo lan dau
ElseIf Round((Now() - Range("Sheet1!B2").Value), 0) [COLOR=red]>= 30[/COLOR] Or Range("[COLOR=red]Sheet1!A1[/COLOR]").Value [COLOR=red]> 10[/COLOR] Then                      'Khi du 30 ngay hoac qua 10 lan thi se het han
Call [COLOR=magenta]Hethan[/COLOR]
End If
End Sub
[COLOR=blue]Private Sub Workbook_BeforeClose(Cancel As Boolean)[/COLOR]
    Me.Save
End Sub

Insert Module:

Mã:
Sub [COLOR=magenta]hethan[/COLOR]()
MsgBox ("Chuong trinh het han!")
Application.DisplayAlerts = False
ThisWorkbook.Close
End Sub

Với code Private Sub Workbook_Open() thì khi bạn mở file quá 10 lần hoặc ngày mở file quá 30 ngày (tính theo giờ hệ thống) thì file sẽ hiện thông báo "Chương trình hết hạn" và tự đóng lại.

Hạn chế: người dùng thay đổi ngày giờ hệ thống --> ko khắc phục được.
người dùng mở file nhưng ko đóng ko save --> ko đếm được số lần mở file --> khắc phục bằng Code Private Sub Workbook_BeforeClose(Cancel As Boolean). Code này làm cho file tự save khi người dùng đóng file lại.

Đến đây thì gần như đã hoàn chỉnh phần giới hạn số lần đọc file tuy nhiên nếu người dùng Disable macro hoặc vào xóa VBA thì file này vô dụng. Phần bảo về VBA chắc bạn đã biết rồi tôi không đề cập đến ở đây, mà tôi muốn nói đến việc bắt buộc người dùng phài Enable Macro trước khi xem file.

Theo file ví dụ tôi có 03 Sheet (Sheet1 "dùng ghi nhận số lần mở file và ngày mở file lần đầu - là cơ sở để giới hạn xem file, Sheet2 "dùng làm noi chứa dữ liệu cần dùng", Sheet3 " là Sheet xuất hiện khi mở file, Sheet này chứa 1 button để vào Sheet2". Sở dĩ cần có Sheet3 là vì khi người dùng ko Enable Macro thì ko thể nào vào được Sheet2 để lấy dữ liệu.

Muốn xem Sheet1 thì bạn cần vào VBA (Pass:12345) chọn Sheet1 bấm F4 --> Chọn Visible: -1 xlSheetVisible.

Mời các bạn xem file ví dụ:
 

File đính kèm

  • Han Che So Lan Xem File.xls
    23.5 KB · Đọc: 354
Upvote 0
Code này hay quá! thanks
 
Upvote 0
Để góp vui mình viết 1 file cứ chép file này thì thử được 15 phút, quá 15 phút không mở được nữa. Muốn mở copy thành file mới và tiếp tục chỉ mở trong vòng 15 phút

Mã:
Private Sub Workbook_Open()
    Dim fs, f, s
    Dim tb As String
Application.Visible = False
tep = ThisWorkbook.Name
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(tep)
    s = f.DateCreated + 1 / 96
If Now() > s Then
tb = "File nay da qua han test, de co the test ban copy file nay" & Chr(13) & _
  "thanh ban copy khac de test hoac goi cho so 123456789. Cam on!"
MsgBox tb, , "TEST KHONG CHE THOI GIAN"
Application.Quit
Else
tb = "File nay chi mo duoc trong thoi gian 15 phut. Qua han de co the test" & Chr(13) & _
  "ban copy file nay thanh ban copy khac de test hoac goi cho so 123456789. Cam on!"
MsgBox tb, , "TEST KHONG CHE THOI GIAN"
Application.Visible = True
End If
End Sub

Pass: gpe
1 ngày=1, 15 phút= 1/96 căn cứ vào đó điều chỉnh thời gian tuỳ ý
 

File đính kèm

  • Pass.xls
    27 KB · Đọc: 155
Lần chỉnh sửa cuối:
Upvote 0
Để góp vui mình viết 1 file cứ chép file này thì thử được 15 phút, quá 15 phút không mở được nữa. Muốn mở copy thành file mới và tiếp tục chỉ mở trong vòng 15 phút

Mã:
Private Sub Workbook_Open()
    Dim fs, f, s
    Dim tb As String
Application.Visible = False
tep = ThisWorkbook.Name
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(tep)
    s = f.DateCreated + 1 / 96
If Now() > s Then
tb = "File nay da qua han test, de co the test ban copy file nay" & Chr(13) & _
  "thanh ban copy khac de test hoac goi cho so 123456789. Cam on!"
MsgBox tb, , "TEST KHONG CHE THOI GIAN"
Application.Quit
Else
tb = "File nay chi mo duoc trong thoi gian 15 phut. Qua han de co the test" & Chr(13) & _
  "ban copy file nay thanh ban copy khac de test hoac goi cho so 123456789. Cam on!"
MsgBox tb, , "TEST KHONG CHE THOI GIAN"
Application.Visible = True
End If
End Sub
Pass: gpe
1 ngày=1, 15 phút= 1/96 căn cứ vào đó điều chỉnh thời gian tuỳ ý
Dạ không biết máy em bị sao.Khi mở File lên là bị lỗi Runtime error 53 liền.Không có debug(mờ) mà chi có end(sáng) và help(sáng) thôi.
 
Upvote 0
Bạn chép hẳn vào máy rồi thử nhé. Thử trực tiếp trên mạng không được đâu.
 
Upvote 0
Dạ em lưu vào ổ D của máy.Khi em mở lên thì như thế này.Nên em không làm gi được.Thầy xem thử sao.
Untitled1-33.png
 
Upvote 0
Mình bổ xung đường dẫn tránh lỗi không tìm thấy file
Vì thời gian chỉ có 15 phút nên chép xong phải mở ngay. Để dài hơn thì phải chờ lâu.
 

File đính kèm

  • Copy (2) of Pass.rar
    7.7 KB · Đọc: 105
Upvote 0
Mình bổ xung đường dẫn tránh lỗi không tìm thấy file
Vì thời gian chỉ có 15 phút nên chép xong phải mở ngay. Để dài hơn thì phải chờ lâu.
Anh ơi... em nghĩ giải pháp này hay hơn: Số giờ mà ta hạn chế phải tính là số giờ người ta dùng file chứ ... Ví dụ anh hạn chế trong 1 giờ, vậy khi em mở file 15 phút rồi đóng lại thì vẫn tính 15 phút thôi... Sau đó em mở file này thêm 30 phút nữa thì cộng dồn vào là 45 phút sử dụng
Chứ làm như anh thì... Ẹc... Ẹc... Em chưa mở file nó đã hết hạn mất rồi còn gì
(nhưng vẫn phải công nhận rằng giải thuật HAY)
 
Upvote 0
Cách 1:Ta lấy ngày Create file từ thuộc tính của file, ngày này sửa không đơn giản. Mỗi khi mở file kiểm tra ngày hệ thống với ngày tạo file nếu quá hạn thì thông báo và thoát.

nếu được nhờ anh hướng dẫn cách coi ngày Create file và sửa ngày.
Cám ơn anh nhiều -=.,,
 
Upvote 0
nếu được nhờ anh hướng dẫn cách coi ngày Create file và sửa ngày
Bạn tham khảo code lấy các thông số về file nhé. (Trong Help của Exc có đủ cả)

PHP:
Sub ShowFileAccessInfo()
    Dim fs, f, s
    filespec = ThisWorkbook.path & "\" & ThisWorkbook.Name
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(filespec)
    s = "Ten file: " & f.Name & vbCrLf
    s = s & "O dia: " & UCase(f.Drive) & vbCrLf
    s = s & "Created: " & f.DateCreated & vbCrLf
    s = s & "Last Accessed: " & f.DateLastAccessed & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified
    MsgBox s, 0, "File Access Info"
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Ấn định thời hạn dùng cho 1 file (expire date)

Chào các bạn

Trong excel có cách nào để ấn định thời gian nào đó file tự động xoá 1 vùng số liệu mình muốn không nhỉ (viết VBA hoặc chọn option)

ví dụ: ấn định thời gian cứ tới từ ngày 5 tháng 12 khi mở file là tự động nó xoá 1 sheet nào đó.

...các bạn chỉ giáo mình với


Cám ơn nhiều
 
Upvote 0
Không những xoá dữ liệu mà nó còn "tự tử" nữa kia. Trên diễn đàn đã có bài về vấn đề file excel tự xoá chính nó đấy Tham khảo ở đây
Còn việc xoá sheet thì đơn giản hơn
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom