Macro Excel để ẩn/hiện thanh Ribbon đối với người dùng cụ thể trong sổ làm việc.

Chào, tôi cần một đoạn mã macro để khi một người dùng cụ thể đăng nhập vào biểu mẫu đăng nhập, họ sẽ không thể nhìn thấy thanh ribbon nữa.

Cảm ơn

Carlos




Trả lời:
Trả lời: Vô hiệu hóa người dùng

'Để hiển thị/ẩn thanh công cụ: (các tab bị ẩn)'

Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",True)"
Application.ExecuteExcel4Macro "Show.ToolBar(""Ribbon"",False)"

'---
Jim Cone
Portland, Oregon, Hoa Kỳ
https://goo.gl/IUQUN2 (Dropbox)


Trả lời:

Cảm ơn Jim đã trả lời.

Chức năng này áp dụng cho tất cả người dùng hay tôi chỉ có thể gán cho một số người dùng cụ thể? Tôi muốn gán cho tất cả người dùng, chỉ là cho một số người dùng cụ thể thôi.

Cảm ơn

Carlos



Trả lời:

Hãy chèn đoạn mã này vào một mô-đun và chạy nó; nó sẽ cung cấp cho bạn tên và ID người dùng của người đang đăng nhập.

Sub GetUserName_Environ()
Dim ObjWshNw As Object
Đặt ObjWshNw = CreateObject("WScript.Network")

MsgBox "Tên người dùng: " & ObjWshNw.UserName & vbCrLf & _
"ComputerName: " & ObjWshNw.ComputerName & vbCrLf & _
"Tên miền: " & ObjWshNw.UserDomain
End Sub

Nếu người dùng của bạn là người đăng nhập chính trên máy tính của họ, bạn có thể làm như sau (mã được đặt phía sau ThisWorkbook)

Private Sub Workbook_Open()

Dim ObjWshNw As Object
Đặt ObjWshNw = CreateObject("WScript.Network")

ApprovedIDList = Array("User1", "User2", "User3") 'thay thế đoạn này bằng ID người dùng thực

ConfirmName = Application.Match(ObjWshNw.UserName, ApprovedIDList, False)

Nếu IsError(ConfirmName) thì
'không làm gì cả'
Khác
'Hãy đặt mã của bạn vào đây để ẩn dải băng khỏi ba người dùng đó'
Kết thúc nếu

End Sub



Trả lời:

Cảm ơn bạn đã trả lời.

Vậy phương án nào sẽ tốt nhất nếu, ví dụ, tôi chỉ muốn người quản trị được xác định có quyền truy cập vào thanh công cụ chứ không phải người dùng thông thường?

Cảm ơn



Trả lời:

Giả sử ID mạng của quản trị viên của bạn là "Joe4167"

Private Sub Workbook_Open()

Dim ObjWshNw As Object
Đặt ObjWshNw = CreateObject("WScript.Network")

ApprovedIDList = Array("Joe4167") 'vẫn sử dụng mảng để dễ dàng thêm các ID khác

'Cần cung cấp ID sau nếu bạn muốn.'

ConfirmName = Application.Match(ObjWshNw.UserName, ApprovedIDList, False)

Nếu IsError(ConfirmName) thì 'Đây là người dùng chưa được phê duyệt; ID không có trong mảng'
'giấu dải ruy băng ở đây
Kết thúc nếu

End Sub

Cho đến nay, điều này chỉ trả lời câu hỏi ban đầu của bạn về việc ẩn thanh ribbon... nhưng điều gì sẽ xảy ra nếu người dùng chuyển sang một sổ làm việc khác để làm việc khác và cần thanh ribbon đó? Còn việc hiển thị lại thanh ribbon nếu họ đóng sổ làm việc này thì sao? Thiết kế giao diện người dùng tốt đòi hỏi bạn chỉ ẩn thanh ribbon khi sổ làm việc đang hoạt động (sử dụng sự kiện workbook_activate và workbook_deactivate), và bật lại thanh ribbon theo mặc định khi sổ làm việc này đóng (sự kiện workbook_beforeclose).

Ngoài ra, điều gì sẽ xảy ra nếu người dùng mở sổ làm việc và tự tay hiển thị lại thanh ribbon? Nếu bạn chỉ đang cố gắng cung cấp trải nghiệm người dùng tốt với nhiều không gian màn hình, thì bạn không cần phải lo lắng về loại người dùng này. Nếu bạn đang cố gắng kiểm soát quyền truy cập của người dùng vào thanh ribbon và làm cho nó không khả dụng... Tôi chưa từng làm điều đó, vì vậy tôi sẽ để các thành viên khác trong diễn đàn giải quyết vấn đề này.

Chỉnh sửa: Một suy nghĩ bổ sung - người dùng có thể không bật dải băng đó theo mặc định (giống như hầu hết người dùng cuối không thấy dải băng dành cho nhà phát triển, nhưng điều này có thể áp dụng cho bất kỳ dải băng nào). Bạn có thể muốn ghi lại trạng thái của dải băng trong sự kiện workbook_open và sử dụng trạng thái đó để đặt lại dải băng khi chuyển đổi giữa các sổ làm việc hoặc thoát khỏi sổ làm việc của mình. Nếu bạn chỉ đặt lại nó về trạng thái hiển thị, bạn có thể đang hiển thị lại nó cho những người dùng cuối không muốn thấy nó trong các sổ làm việc khác...

Comments

Popular posts from this blog

Xử lý hàng loạt các tệp Excel được bảo vệ bằng mật khẩu

Thu hẹp và mở rộng cột trong Excel

Mở tài liệu Excel và Word từ Outlook Lỗi - Không đủ bộ nhớ