Khóa các marco (1 người xem)

Liên hệ QC

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

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,579
Được thích
3,723
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
E có 1 sheet có vài nút để chạy các marco
E muốn vô hiệu hóa (khóa) các nút này lại (không bấm được) để người dùng ko sử dụng được chức năng marco.. (chỉ admin mới sử dụng được chức năng này)
E có thử dùng cách protect sheet thì vấn bấm được -> báo lỗi chạy marco ạh
Mong mng giúp đỡ...
 
E có 1 sheet có vài nút để chạy các marco
E muốn vô hiệu hóa (khóa) các nút này lại (không bấm được) để người dùng ko sử dụng được chức năng marco.. (chỉ admin mới sử dụng được chức năng này)
E có thử dùng cách protect sheet thì vấn bấm được -> báo lỗi chạy marco ạh
Mong mng giúp đỡ...
Vậy thì cứ để họ bấm thoải mái, nhưng ở đầu Sub mà nút lệnh này Assign, bạn đặt một InputBox chẳng hạn, yêu cầu nhập Password, khi nào nhập đúng thì mới thực hiện lệnh, ngược lại thì không thực hiện.
 
Upvote 0
Mình nghĩ làm cách này: Chèn trước Marco đoạn code hỏi Pass (Form, InputBox, ...), đăng nhập đúng Pass thì chạy Marco, ngược lại thì Exit Sub. Có phải như vậy không nhỉ?
 
Upvote 0
Vậy thì cứ để họ bấm thoải mái, nhưng ở đầu Sub mà nút lệnh này Assign, bạn đặt một InputBox chẳng hạn, yêu cầu nhập Password, khi nào nhập đúng thì mới thực hiện lệnh, ngược lại thì không thực hiện.
A có thể ví dụ vào cái cót két này được ko ạh, vì e chưa biết j ạh:
Mã:
Sub KHKD()
    With Sheets("KQKD")
    Sheets("KQKD").Unprotect
        Range("F7:G37").Clear
        Range("DS_canbo").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
        ("Don_vi"), CopyToRange:=Sheets("KQKD").Range("F6:G6"), Unique:=False
    Sheets("KQKD").Protect
    End With
End Sub
 
Upvote 0
Upvote 0
A có thể ví dụ vào cái cót két này được ko ạh, vì e chưa biết j ạh:
Mã:
Sub KHKD()
    With Sheets("KQKD")
    Sheets("KQKD").Unprotect
        Range("F7:G37").Clear
        Range("DS_canbo").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range _
        ("Don_vi"), CopyToRange:=Sheets("KQKD").Range("F6:G6"), Unique:=False
    Sheets("KQKD").Protect
    End With
End Sub
Mình thử làm như thế này, bạn thử xem có sử dụng được không:
[gpecode=vb]
Sub Button2_Click()
Dim Pss As String
Pss = InputBox("PassWords:", "Administrator:")
If Pss <> "123" Then Exit Sub
MsgBox "Tiep tuc chay Sub"
End Sub
[/gpecode]
Đưa code thay cái MsgBox và sửa lại pass 123.
Làm như vậy có đúng không Phúc nhỉ?
 
Upvote 0
Mình thử làm như thế này, bạn thử xem có sử dụng được không:
[gpecode=vb]
Sub Button2_Click()
Dim Pss As String
Pss = InputBox("PassWords:", "Administrator:")
If Pss <> "123" Then Exit Sub
MsgBox "Tiep tuc chay Sub"
End Sub
[/gpecode]
Đưa code thay cái MsgBox và sửa lại pass 123.
Làm như vậy có đúng không Phúc nhỉ?
Cũng phải cho người ta cơ hội thử lại chứ nhỉ! Chẳng hạn thế này:
[GPECODE=vb]Sub Test()
Dim S As String
Do
S = InputBox("Nhap Password:")
If S = "" Then Exit Do
Loop Until S = "GPE"
If S = "GPE" Then
'Code cua ban o day
End If
End Sub[/GPECODE]
 
Upvote 0
Cũng phải cho người ta cơ hội thử lại chứ nhỉ! Chẳng hạn thế này:
[GPECODE=vb]Sub Test()
Dim S As String
Do
S = InputBox("Nhap Password:")
If S = "" Then Exit Do
Loop Until S = "GPE"
If S = "GPE" Then
'Code cua ban o day
End If
End Sub[/GPECODE]
A Phúc quả thật là RỘNG LƯỢNG...
 
Upvote 0
Cá ngừ F1 sử dụng thử cái Form nhập Pass này xem có được không, nó tiện hơn InputBox là thay dấu * cho pass, nhỡ người khác nhìn thấy.
[gpecode=vb]
Private Sub CdmOK_Click()
Dim Pss As String
Pss = Me.TextBox1
If Pss <> "123" Then
MsgBox "Ban nhap sai Passwords.", vbOKOnly, "Thông báo"
Else
Unload UserForm1
MsgBox "Code ban dat o day"
End If
End Sub
[/gpecode]
Mới tập viết, nhờ các Thầy hướng dẫn thêm.
------------
Hình như dư cái Pss, xóa TextBox để nhập lại:
[gpecode=vb]
Private Sub CdmOK_Click()
If Me.TextBox1 <> "123" Then
MsgBox "Ban nhap sai Passwords.", vbOKOnly, "Thông báo"
Me.TextBox1 = ""
Else
Unload UserForm1
MsgBox "Code ban dat o day"
End If
End Sub
[/gpecode]
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Quan điểm của tôi: Đã cố tình viết code VBA vào file là để cho người ta xài thoải mái. Bẳng ngược lại, đã không muốn người ta xài thì thôi.. nghỉ viết đi cho rồi (tức là xóa hết mấy cái code ấy đi)
 
Upvote 0
Quan điểm của tôi: Đã cố tình viết code VBA vào file là để cho người ta xài thoải mái. Bẳng ngược lại, đã không muốn người ta xài thì thôi.. nghỉ viết đi cho rồi (tức là xóa hết mấy cái code ấy đi)
Nhu cầu như vậy là có thực chứ không phải ích kỷ chi đâu anh. Chẳng hạn, em đang viết một chương trình quản lý điểm cho cả trường sử dụng, trong đó việc nhập điểm của giáo viên nào thì cần phải có pass của giáo viên đó, việc nhập hạnh kiểm học sinh thì cần có pass của giáo viên chủ nhiệm, hoặc muốn can thiệp đến các thiết lập trong hệ thống chương trình thì cần phải có pass hệ thống, chứ nếu không có mấy bức tường rào này thì có mà loạn hết cả lên. Tất nhiên việc này cũng chỉ tương đối nhưng được tới đâu ta làm tới đó vậy.
 
Upvote 0
Quan điểm của tôi: Đã cố tình viết code VBA vào file là để cho người ta xài thoải mái. Bẳng ngược lại, đã không muốn người ta xài thì thôi.. nghỉ viết đi cho rồi (tức là xóa hết mấy cái code ấy đi)
Dạ..thực ra file của để ở trạng thái share..người dùng đơn giản là cập nhật các dữ liệu..còn muốn có báo cáo thì cần chạy marco..mà share thì marco sẽ xung đột ngay,việc khoá các marco lại để đỡ bị xung đột..khi nào cần báo cáo mới bỏ share để chạy marco.
e cũng mường tượng ra phải sử dụng accses trên máy chủ làm file database và các máy khách dùng excel.. Nhưng trình độ chưa đủ nên dùng cách hơi CÙI tí ạh...
 
Upvote 0
Nhu cầu như vậy là có thực chứ không phải ích kỷ chi đâu anh. Chẳng hạn, em đang viết một chương trình quản lý điểm cho cả trường sử dụng, trong đó việc nhập điểm của giáo viên nào thì cần phải có pass của giáo viên đó, việc nhập hạnh kiểm học sinh thì cần có pass của giáo viên chủ nhiệm, hoặc muốn can thiệp đến các thiết lập trong hệ thống chương trình thì cần phải có pass hệ thống, chứ nếu không có mấy bức tường rào này thì có mà loạn hết cả lên. Tất nhiên việc này cũng chỉ tương đối nhưng được tới đâu ta làm tới đó vậy.
Cái đó tùy mình bố trí thôi
Nếu tôi "quản" việc này thì tôi làm khác:
- Không chơi nhập chung trong 1 file
- Tôi sẽ chia ra mỗi người 1 file để nhập
Vậy đâu cần phải phân quyền chi cho mệt
 
Upvote 0
Cái đó tùy mình bố trí thôi
Nếu tôi "quản" việc này thì tôi làm khác:
- Không chơi nhập chung trong 1 file
- Tôi sẽ chia ra mỗi người 1 file để nhập
Vậy đâu cần phải phân quyền chi cho mệt
Thực ra thì em sử dụng cả 2 hình thức:
- Xuất file và gửi mail cho giáo viên nhập điểm, sau khi nhập xong thì họ gửi mail lại cho em và em sẽ cập nhật vào file tổng.
- Giáo viên nhập trực tiếp từ file tổng. Với hình thức này thì xuất dữ liệu tương ứng vào 1 sheet tạm thời để giáo viên nhập, sau đó thì lưu dữ liệu này vào "kho". Muốn như vậy thì mỗi người cần có password riêng để đảm bảo rằng người này không nhập điểm của người kia.

Và tất nhiên một chương trình như vậy thì cần phải có một số thông tin mà không phải ai cũng được phép chỉnh sửa, chẳng hạn năm học, tên trường, danh sách học sinh,... Do đó, việc đưa ra password để đảm nhiệm vấn đề này là việc nên làm.
 
Upvote 0
Cũng phải cho người ta cơ hội thử lại chứ nhỉ! Chẳng hạn thế này:
[GPECODE=vb]Sub Test()
Dim S As String
Do
S = InputBox("Nhap Password:")
If S = "" Then Exit Do
Loop Until S = "GPE"
If S = "GPE" Then
'Code cua ban o day
End If
End Sub[/GPECODE]
mình insert đoạn code nay trước macro của mình sao noa ko chạy nhỉ mình dùng shape để tạo nút nhấn. ??
 
Upvote 0
bạn nên đặt enabled = false cho cái nút đó nếu không phải là admin. chứ để nút đó, bấm vào không thấy gì cũng không hay. cách này đơn giản, đỡ phải đặt quá nhiều bẫy lỗi. thậm chí có thể cho visible = false luôn (cái này có thể làm mất sự cân đối của giao diện)
 
Upvote 0

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

Back
Top Bottom