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
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
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
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)
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.
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?
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!
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.
[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.
Để 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ỳ ý
Để 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ỳ ý
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)
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.
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
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
Nhưng thực ra mình muốn ấn định chính xác ngày mà file tự động xoá data, vì nếu chỉ ấn định theo thời gian sử dụng file thì vài tháng sau họ mở file lên vẫn đọc dc số liệu.
...vì cứ mỗi tháng mình chỉ định người nào đó được phép đọc file data, những ai copy file về máy của mình rồi thì khi hết hạn sẽ tự động xoá, nếu cần mình sẽ xem xét để cung cấp cho họ file mới.
Nhưng thực ra mình muốn ấn định chính xác ngày mà file tự động xoá data, vì nếu chỉ ấn định theo thời gian sử dụng file thì vài tháng sau họ mở file lên vẫn đọc dc số liệu.
...vì cứ mỗi tháng mình chỉ định người nào đó được phép đọc file data, những ai copy file về máy của mình rồi thì khi hết hạn sẽ tự động xoá, nếu cần mình sẽ xem xét để cung cấp cho họ file mới.
Việc định ngày giờ có gì đâu mà khó hả bạn? Copy Code của Sealand vào rồi tuỳ chỉnh ngày giờ thôi. Nhưng tôi khuyên bạn, đừng quá tập trung vào cái này, chỉ là vui thôi, còn bảo mật thì chọn phần mềm khác hỗ trợ đi. Bảo mật trong Excel không đáng tin tưởng lắm đâu.
Bạn để ý sẽ thấy mình đã có ý đưa ra một số cách xác định thời gian. Bài trước là khống chế thời gian từ khi tạo file, bài này là từ khi mở file. Bạn tham khảo rồi lựa theo ý mình nhé.
Việc định ngày giờ có gì đâu mà khó hả bạn? Copy Code của Sealand vào rồi tuỳ chỉnh ngày giờ thôi. Nhưng tôi khuyên bạn, đừng quá tập trung vào cái này, chỉ là vui thôi, còn bảo mật thì chọn phần mềm khác hỗ trợ đi. Bảo mật trong Excel không đáng tin tưởng lắm đâu.
thực ra thì mình cũng có biết nó bảo mật cũng không OK lắm, data của mình là để theo dõi kinh doanh hàng tháng, dựa vào đó có thể dễ dàng thấy những bất thường và điều chỉnh hoạt động của nv bán hàng tức thì, nên nó có thể dc dùng hàng ngày hay vài lần trong 1 tuần nên mình nghĩ là giới hạn theo thời gian mở là không OK lắm,.nên mình mới muốn ấn định cụ thể vào ngày đầu tháng sau là tự động xoá.
...mình thấy phòng nhân sự có 1 file data về lương thưởng hàng tháng và chỉ có giới hạn máy của 1 số người mới mở dc (cty mình mỗi người có 1 user ID riêng, nếu ai đó có copy về máy ở nhà thì cũng không mở dc...không hiểu họ làm cách nào nhỉ
bạn chỉ mình cách sửa code với...mình dốt vụ này lắm
thực ra thì mình cũng có biết nó bảo mật cũng không OK lắm, data của mình là để theo dõi kinh doanh hàng tháng, dựa vào đó có thể dễ dàng thấy những bất thường và điều chỉnh hoạt động của nv bán hàng tức thì, nên nó có thể dc dùng hàng ngày hay vài lần trong 1 tuần nên mình nghĩ là giới hạn theo thời gian mở là không OK lắm,.nên mình mới muốn ấn định cụ thể vào ngày đầu tháng sau là tự động xoá.
...mình thấy phòng nhân sự có 1 file data về lương thưởng hàng tháng và chỉ có giới hạn máy của 1 số người mới mở dc (cty mình mỗi người có 1 user ID riêng, nếu ai đó có copy về máy ở nhà thì cũng không mở dc...không hiểu họ làm cách nào nhỉ
bạn chỉ mình cách sửa code với...mình dốt vụ này lắm
Bạn thử xem cái File củ chuối của mình nhé! File sẽ không bị xoá, chỉ xoá nội dung thôi. Mong rằng các cao thủ chỉ giáo thêm. Chép File qua máy khác chỉ có hiệu quả khi và chỉ khi máy đó Macro Securities trong trạng thái Low, tôi nghe nói có phần mềm nào đó biến file Excel thành đuôi .exe, có thể chạy mà không cần cài đặt như trên. Không biết thực hư thế nào.
...mình thấy phòng nhân sự có 1 file data về lương thưởng hàng tháng và chỉ có giới hạn máy của 1 số người mới mở dc (cty mình mỗi người có 1 user ID riêng, nếu ai đó có copy về máy ở nhà thì cũng không mở dc...không hiểu họ làm cách nào nhỉ
Nếu chỉ không cho mở file thôi thì tại sao bạn không dùng Password khống chế mở hoặc Password hạn chế sửa. Mọi người nói vậy chứ phá Pass dạng này thường không đơn giản đâu. Bạn thử làm như sau xem có được không:
1/Mở file của bạn ra như bình thường.
2/Vào Menu File-->Save As
Trong Dialog Save As chọn Tools( Ở góc trên bên phải ấy)-->Chọn General Options
3/Cửa sổ Save Option mở ra:
-Dòng trên là nhập Pass để mở.
-Dòng dưới là Pass để sửa.
Bạn nhập Pass với độ khó cần thiết. Sau đó nhấn OK. Cửa sổ Confirm Pass mở ra yêu cầu bạn nhập xác nhận lại Pass nếu khớp thì tự động thoát ra. Bạn nhấn Save là xong. Tuy nhiên chương trình có hỏi là file đã có, có ghi đè khônng thì bạn cứ chọn OK.
Từ giờ chỉ khi biết Pass mới mở được (Lưu ý có phân biệt chữ thường và chữ hoa)
Chúc bạn vừa ý.
Bạn thử đoạn code sau sẽ thấy làm thế nào để biết máy nào, server nào mở file, từ đó bạn sẽ tìm cách hạn chế những máy nào và server nào mở file.
PHP:
Sub thu()
MsgBox Environ("COMPUTERNAME")
MsgBox Environ("LOGONSERVER")
End Sub
Công dụng của hàm
Environ("COMPUTERNAME") Cho biết máy nào mở phòng khi chép về máy cũng chặn được.
Environ("LOGONSERVER") cho biết server nào logon qua mạng LAN để chặn.
Có một điều là mình cần ngăn chặn chính nv của mình mang file data này lọt vào tay cty đối thủ, nên để đề phòng trong trường hợp khi có 1 nv nào đó bỏ qua làm việc cho cty đối thủ thì họ chỉ xài dc số liệu trong phạm vi thời gian nhất định...hihi
Mình cũng mới trao đổi với nv IT và họ có giải pháp để bảo vệ rồi.
thực ra thì mình cũng có biết nó bảo mật cũng không OK lắm, data của mình là để theo dõi kinh doanh hàng tháng, dựa vào đó có thể dễ dàng thấy những bất thường và điều chỉnh hoạt động của nv bán hàng tức thì, nên nó có thể dc dùng hàng ngày hay vài lần trong 1 tuần nên mình nghĩ là giới hạn theo thời gian mở là không OK lắm,.nên mình mới muốn ấn định cụ thể vào ngày đầu tháng sau là tự động xoá.
...mình thấy phòng nhân sự có 1 file data về lương thưởng hàng tháng và chỉ có giới hạn máy của 1 số người mới mở dc (cty mình mỗi người có 1 user ID riêng, nếu ai đó có copy về máy ở nhà thì cũng không mở dc...không hiểu họ làm cách nào nhỉ
bạn chỉ mình cách sửa code với...mình dốt vụ này lắm
Theo tôi nghĩ: file ít nhiều cũng hỗ trợ được ý tưởng của bạn. Bạn tải về xem thử nhé!
- File chỉ cho phép nhập liệu chứ không cho sửa (có pass sửa và tất nhiên NV nhập liệu không thể biết), nếu có dùng High security thì cũng không xem được dữ liệu!
- File có thiết kế thêm thời hạn sử dụng, nếu bạn muốn xóa dữ liệu tự động theo định kỳ thì gắn thêm marco nữa là OK thôi. Và ...
- Để mở file bạn chọn mã người dùng là NV01 pass là xuyen; các mã người dùng khác có pass tương ứng với tên gọi của NV đó. Khi đăng nhập thành công, bạn chọn nút Danh mục để xem danh mục các thành viên nhé! Chúc bạn thành công.
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
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.
Em thấy code này rất hợp với mục đích sử dụng của em nhưng em muốn sửa thành nếu ngày dùng quá ngày 1-5-2008 thì mình có thể viết code yêu cầu người dùng nhập mật khẩu vào nếu nhập sai mật khẩu thì đóng file lại còn nếu nhập đúng thì cho phép mở file để dùng được không ạ >> xin bác giúp em code chỗ đó ạ >>> mục đích em muốn giới hạn thời gian sử dụng của người khác nếu muốn dùng thì phải xin mật khẩu đăng nhập từ em mới có thể dùng tiếp ạ.
Em thấy code này rất hợp với mục đích sử dụng của em nhưng em muốn sửa thành nếu ngày dùng quá ngày 1-5-2008 thì mình có thể viết code yêu cầu người dùng nhập mật khẩu vào nếu nhập sai mật khẩu thì đóng file lại còn nếu nhập đúng thì cho phép mở file để dùng được không ạ >> xin bác giúp em code chỗ đó ạ >>> mục đích em muốn giới hạn thời gian sử dụng của người khác nếu muốn dùng thì phải xin mật khẩu đăng nhập từ em mới có thể dùng tiếp ạ.
Em thấy code này rất hợp với mục đích sử dụng của em nhưng em muốn sửa thành nếu ngày dùng quá ngày 1-5-2008 thì mình có thể viết code yêu cầu người dùng nhập mật khẩu vào nếu nhập sai mật khẩu thì đóng file lại còn nếu nhập đúng thì cho phép mở file để dùng được không ạ >> xin bác giúp em code chỗ đó ạ >>> mục đích em muốn giới hạn thời gian sử dụng của người khác nếu muốn dùng thì phải xin mật khẩu đăng nhập từ em mới có thể dùng tiếp ạ.
Dim strPass As String
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
Dim strPass As String
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
em dùng code riêng của bác ra 1 file thì rất ok nhưng ý của em ở trên là em muốn thêm vào phần code của bác sealand ở trên sau cái đoạn "If ng > 1 And th > 5 And nam >= 2008 Then". tức là sửa code chỗ đó nếu ngày mở sau ngày 1-5-2008 thì không phải đóng file đó nữa mà là hỏi tiếp ng mở mật khẩu nếu họ điền đúng mật khẩu thì cho họ vào còn không mới đóng file lại.
Em tự ghép nối mà không được, em mới tìm hiểu về code mong bác giúp em nối nốt chỗ đó thành 1 code hoàn thiện. Cảm ơn bác nhiều
em dùng code riêng của bác ra 1 file thì rất ok nhưng ý của em ở trên là em muốn thêm vào phần code của bác sealand ở trên sau cái đoạn "If ng > 1 And th > 5 And nam >= 2008 Then". tức là sửa code chỗ đó nếu ngày mở sau ngày 1-5-2008 thì không phải đóng file đó nữa mà là hỏi tiếp ng mở mật khẩu nếu họ điền đúng mật khẩu thì cho họ vào còn không mới đóng file lại.
Em tự ghép nối mà không được, em mới tìm hiểu về code mong bác giúp em nối nốt chỗ đó thành 1 code hoàn thiện. Cảm ơn bác nhiều
Private Sub Workbook_Open()
Dim strPass As String
ng = Day(Date)
th = Month(Date)
nam = Year(Date)
If ng > 1 And th > 5 And nam >= 2008 Then
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
End If
End Sub
Private Sub Workbook_Open()
Dim strPass As String
ng = Day(Date)
th = Month(Date)
nam = Year(Date)
If ng > 1 And th > 5 And nam >= 2008 Then
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
End If
End Sub
Option Explicit là một câu lệnh trong VBA (Visual Basic for Applications) và VBScript. Khi bạn sử dụng Option Explicit ở đầu một module, bạn buộc phải khai báo tất cả các biến mà bạn sử dụng trong module đó.
Nếu bạn không khai báo một biến và cố gắng sử dụng nó khi Option Explicit đang được sử dụng, VBA sẽ báo lỗi biên dịch và yêu cầu bạn khai báo biến.
Việc sử dụng Option Explicit giúp bạn tránh các lỗi do việc gõ sai tên biến hoặc sử dụng các biến chưa được khai báo. Điều này làm cho code của bạn dễ đọc và bảo dưỡng hơn, và giúp bạn phát hiện các lỗi một cách dễ dàng hơn.
Trong trường hợp của bạn thì các biến ng, th, nam chưa được khai báo. Có 2 cách làm:
1. Khai báo biến (nên làm cách này)
2. Xóa Option Explicit
Bài đã được tự động gộp:
Mã:
Option Explicit
Private Sub Workbook_Open()
Dim strPass As String
Dim ng As Integer, th As Integer, nam As Integer
ng = Day(Date)
th = Month(Date)
nam = Year(Date)
If ng > 1 And th > 5 And nam >= 2008 Then
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
End If
End Sub
Option Explicit là một câu lệnh trong VBA (Visual Basic for Applications) và VBScript. Khi bạn sử dụng Option Explicit ở đầu một module, bạn buộc phải khai báo tất cả các biến mà bạn sử dụng trong module đó.
Nếu bạn không khai báo một biến và cố gắng sử dụng nó khi Option Explicit đang được sử dụng, VBA sẽ báo lỗi biên dịch và yêu cầu bạn khai báo biến.
Việc sử dụng Option Explicit giúp bạn tránh các lỗi do việc gõ sai tên biến hoặc sử dụng các biến chưa được khai báo. Điều này làm cho code của bạn dễ đọc và bảo dưỡng hơn, và giúp bạn phát hiện các lỗi một cách dễ dàng hơn.
Trong trường hợp của bạn thì các biến ng, th, nam chưa được khai báo. Có 2 cách làm:
1. Khai báo biến (nên làm cách này)
2. Xóa Option Explicit
Bài đã được tự động gộp:
Mã:
Option Explicit
Private Sub Workbook_Open()
Dim strPass As String
Dim ng As Integer, th As Integer, nam As Integer
ng = Day(Date)
th = Month(Date)
nam = Year(Date)
If ng > 1 And th > 5 And nam >= 2008 Then
strPass = InputBox("Nhap mat khau: hoangtuan.net", "Your Password")
If strPass <> "hoangtuan.net" Then
MsgBox "Mat khau khong chinh xac. File se duoc dong.", vbCritical
ThisWorkbook.Close False
End If
End If
End Sub
Trước tiên em rất cảm ơn Bác vì đã nhiệt tình giúp em. Nhưng em đã sửa lại file theo cách 1 bác chỉ em nhưng không hiểu sao khi em vào lại nó lại không yêu cầu em nhập mật khẩu nhỉ vì hôm này là ngày 40-4-2024 điều kiện đều thỏa mãn lớn hơn ngày 1-5-2008 >>> thì nó phải thực hiện code đoạn sau bác viết bổ xung cho em chứ nhỉ >> em mở cái nó lại vào trong file luôn đc.
Trước tiên em rất cảm ơn Bác vì đã nhiệt tình giúp em. Nhưng em đã sửa lại file theo cách 1 bác chỉ em nhưng không hiểu sao khi em vào lại nó lại không yêu cầu em nhập mật khẩu nhỉ vì hôm này là ngày 40-4-2024 điều kiện đều thỏa mãn lớn hơn ngày 1-5-2008 >>> thì nó phải thực hiện code đoạn sau bác viết bổ xung cho em chứ nhỉ >> em mở cái nó lại vào trong file luôn đc.
If ng > 1 And th > 5 And nam >= 2008 Then: Điều kiện này kiểm tra xem ngày, tháng và năm hiện tại có thỏa mãn điều kiện (ngày lớn hơn 1, tháng lớn hơn 5 và năm lớn hơn hoặc bằng 2008) hay không. Nếu thỏa mãn, thì yêu cầu người dùng nhập mật khẩu.
Hôm nay là ngày 20 (không có ngày 40) > 1, năm 2024>2008, nhưng hiện tại tháng 4 < 5 nên đoạn mã không hiện khung hỏi mật khẩu là đúng rồi mà!
If ng > 1 And th > 5 And nam >= 2008 Then: Điều kiện này kiểm tra xem ngày, tháng và năm hiện tại có thỏa mãn điều kiện (ngày lớn hơn 1, tháng lớn hơn 5 và năm lớn hơn hoặc bằng 2008) hay không. Nếu thỏa mãn, thì yêu cầu người dùng nhập mật khẩu.
Hôm nay là ngày 20 (không có ngày 40) > 1, năm 2024>2008, nhưng hiện tại tháng 4 < 5 nên đoạn mã không hiện khung hỏi mật khẩu là đúng rồi mà!
...
'Lấy ngày hiện tại
today = Date
' Đặt ngày cần kiểm tra
checkDate = DateSerial(2008, 5, 1)
' Kiểm tra xem ngày hiện tại có lớn hơn hoặc bằng ngày cần kiểm tra không
If today >= checkDate Then
...
Bày đặt khóa file này nọ.
Hôm nay đặt file 1 tháng hết sử dụng thì tháng sau sẽ có người vào GPE hỏi:
- Tôi có 1 file ex [sic], tháng trước chạy đàng hoàng, tháng này sao cứ mở là nó bảo file hết hạn rồi đóng luôn.
Thiếu gì người giúp!!!
Mà quý vị giúp khóa files có bao giờ nghĩ rằng người ta có thể lợi dụng để làm khó cơ quan cũ của mình không? (cùng câu hỏi trên, nhưng của một nạn nhân của thằng ác độc nào đó gài files trước khi ròi cơ quan)