哈嘍,大家好!在日常工作中,工作表經常會被多人編輯,為此,我們往往需要為不同的人設置不同的查看權限,以實現工作表的分級保密。下面分享一種用VBA設置權限的方法,它擁有高逼格的用戶登錄界面,以及完善的分級保密機制,趕緊來看看吧!
提到“多人運動”,你一定以為小編一言不合就開車。你錯了!作為一個正經的Excel教程作者,小編說的多人運動,指的是同一個Excel表格經常需要由多人編輯,供多人使用。
Excel中的多人運動,往往需要賦予不同的人不同的查看權限,從而做到分級保密。簡單地通過文件保護不能區分權限,而通過簡單地隱藏工作表又太容易被取消,形同虛設!為此,小編深夜不睡,YY了一個VBA授權查閱套路,相信同學們看完一定會由衷嘆一句:666!

第一步:建立權限表
賦予不同角色不同的查看權限是“多人運動”表格的重頭戲,我們通過建立權限表來實現這一功能。從權限表第三行開始,我們需要將工作簿中的所有工作表名稱依次填寫;而從第二列開始的每一列,則用於填寫每個角色的用戶名、密碼和對應的權限(用是否表示)。由此,我們可以自由添加工作表和查看角色,不受初始設置的限制。詳見下表。

PS:建立權限表后,我們需要將文件保存為啟用宏的工作簿,文件類型為.xlsm。

第二步:創建窗體
通過窗體驗證用戶權限是“多人運動”表格的門面,它讓這套表的逼格瞬間提升了好幾個檔次有木有。如此裝逼必備老少皆宜的窗體,該如何創建呢?
1. 按Alt+F11,或者點擊開發工具中的Visual Basic按鈕,打開VBA窗口。
2. 點擊【插入】–【用戶窗體】,在彈出的界面中繪制兩個標簽,分別為用戶名和密碼,同時插入兩個文本框和兩個命令按鈕(取消和確定)。具體插入方式和Excel工作表中插入形狀無異,此處不再贅述。

第三步:按鈕代碼
VBA代碼是這套“多人運動”表格的靈魂,表格之所以能夠實現酷炫的分權功能,全在於這寥寥數語!所以,拿走不謝!
具體操作如下:
1. 雙擊窗體中的“確定”按鈕,將下述代碼粘貼到VBA代碼窗口中即可。該段代碼可以實現單擊“確定”按鈕,即啟動校驗用戶密碼並將對應的表格顯示出來的功能。
Private Sub CommandButton1_Click()
Dim j, i As Integer
maxr = Application.CountA(Sheets("權限表").Range("A:A"))
maxc = Application.CountA(Sheets("權限表").Range("1:1"))
If TextBox1.Value = "" Then MsgBox "用戶名不能為空", vbInformation, "注意": Exit Sub
If TextBox2.Value = "" Then MsgBox "密碼名不能為空", vbInformation, "注意": Exit Sub
For i = 2 To maxc
u = Worksheets("權限表").Cells(1, i)
k = Worksheets("權限表").Cells(2, i)
If TextBox1.Text = u And TextBox2.Text = k Then
Unload Me
Application.Visible = True
Application.EnableCancelKey = xlInterrupt
For j = maxr to 3 step -1
ThisWorkbook.Activate
If Sheets("權限表").Cells(j, i) = "是" Then
Sheets(j - 2).Visible = xlSheetVisible
Else
Sheets(j - 2).Visible = xlSheetVeryHidden
End If
Next j
If Sheets("權限表").Visible = xlSheetVisible Then
pw = "excelinexcel"
Sheets("權限表").Unprotect Password = pw
Cells.Select
Selection.EntireColumn.Hidden = False
End If
Exit Sub
End If
Next i
MsgBox "用戶名或密碼錯誤!"
End Sub
2.雙擊窗體中的“取消”按鈕,同樣粘貼下述VBA代碼。該段代碼功能很簡單,即退出Excel。
Private Sub CommandButton2_Click()
Application.DisplayAlerts = False
Unload Me
Application.Visible = True
Application.Quit
Application.EnableEvents = False
End Sub
3. 在兩段代碼的下方,粘貼以下VBA代碼,用於防止用戶通過關閉窗體入侵。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = True
End Sub
4. 雙擊對象窗口中的ThisWorkbook,將下方代碼粘貼到代碼窗口中去。這兩段代碼實現了打開工作簿即彈出窗體開始驗證,並保護和隱藏工作表行列,避免用戶通過禁用宏來越權查看。
工作簿打開事件代碼:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.DisplayAlerts = False
Sheets(1).Visible = xlSheetVisible
Dim sht As Worksheet
For Each sht In Worksheets
If sht.Name <> "權限表" Then
sht.Visible = xlSheetVeryHidden
Else
sht.Select
Cells.EntireColumn.Hidden = True
pw = "excelinexcel"
sht.Protect Password = pw
sht.EnableSelection = xlNoSelection
End If
Next
Application.Visible = False
ThisWorkbook.Close savechanges:=True
End Sub
工作簿關閉事件代碼
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Application.EnableCancelKey = xlDisabled
Application.Visible = False
UserForm1.Show
End Sub
5. 保護VBA工程,確保用戶無法刪除、查看或修改。
操作步驟:
點擊【工具】-【VBAProject屬性】,彈出【VBAProject-工程屬性】對話框,選擇【保護】選項卡,輸入【查看工程屬性的密碼】,點擊【確定】即可。

完成以上操作步驟,一套完美的多人運動表格就搞定了,車也就開完了。此時關閉Excel再次打開即可體驗多人運動的快感,隨文附上演示作品,快拿去把玩把玩吧!最后,以一段打油詩結束今天的分享,下次再見吧!
多人運動有是非,
一不小心就被黑。
學它幾句VBA,
再也不怕把鍋背。