Excel多人共享
哈嘍,大家好!在日常工作中,工作表經(jīng)常會(huì)被多人編輯,為此,我們往往需要為不同的人設(shè)置不同的查看權(quán)限,以實(shí)現(xiàn)工作表的分級(jí)保密。下面分享一種用VBA設(shè)置權(quán)限的方法,它擁有高逼格的用戶登錄界面,以及完善的分級(jí)保密機(jī)制,趕緊來(lái)看看吧!
提到“多人運(yùn)動(dòng)”,你一定以為小編一言不合就開(kāi)車。你錯(cuò)了!作為一個(gè)正經(jīng)的Excel教程作者,小編說(shuō)的多人運(yùn)動(dòng),指的是同一個(gè)Excel表格經(jīng)常需要由多人編輯,供多人使用。
Excel中的多人運(yùn)動(dòng),往往需要賦予不同的人不同的查看權(quán)限,從而做到分級(jí)保密。簡(jiǎn)單地通過(guò)文件保護(hù)不能區(qū)分權(quán)限,而通過(guò)簡(jiǎn)單地隱藏工作表又太容易被取消,形同虛設(shè)!為此,小編深夜不睡,YY了一個(gè)VBA授權(quán)查閱套路,相信同學(xué)們看完一定會(huì)由衷嘆一句:666!
第一步:建立權(quán)限表
賦予不同角色不同的查看權(quán)限是“多人運(yùn)動(dòng)”表格的重頭戲,我們通過(guò)建立權(quán)限表來(lái)實(shí)現(xiàn)這一功能。從權(quán)限表第三行開(kāi)始,我們需要將工作簿中的所有工作表名稱依次填寫;而從第二列開(kāi)始的每一列,則用于填寫每個(gè)角色的用戶名、密碼和對(duì)應(yīng)的權(quán)限(用是否表示)。由此,我們可以自由添加工作表和查看角色,不受初始設(shè)置的限制。詳見(jiàn)下表。
PS:建立權(quán)限表后,我們需要將文件保存為啟用宏的工作簿,文件類型為.xlsm。
第二步:創(chuàng)建窗體
通過(guò)窗體驗(yàn)證用戶權(quán)限是“多人運(yùn)動(dòng)”表格的門面,它讓這套表的逼格瞬間提升了好幾個(gè)檔次有木有。如此裝逼必備老少皆宜的窗體,該如何創(chuàng)建呢?
1. 按Alt+F11,或者點(diǎn)擊開(kāi)發(fā)工具中的Visual Basic按鈕,打開(kāi)VBA窗口。
2. 點(diǎn)擊【插入】–【用戶窗體】,在彈出的界面中繪制兩個(gè)標(biāo)簽,分別為用戶名和密碼,同時(shí)插入兩個(gè)文本框和兩個(gè)命令按鈕(取消和確定)。具體插入方式和Excel工作表中插入形狀無(wú)異,此處不再贅述。
第三步:按鈕代碼
VBA代碼是這套“多人運(yùn)動(dòng)”表格的靈魂,表格之所以能夠?qū)崿F(xiàn)酷炫的分權(quán)功能,全在于這寥寥數(shù)語(yǔ)!所以,拿走不謝!
具體操作如下:
1. 雙擊窗體中的“確定”按鈕,將下述代碼粘貼到VBA代碼窗口中即可。該段代碼可以實(shí)現(xiàn)單擊“確定”按鈕,即啟動(dòng)校驗(yàn)用戶密碼并將對(duì)應(yīng)的表格顯示出來(lái)的功能。
Private Sub CommandButton1_Click()
Dim j, i As Integer
maxr = Application.CountA(Sheets("權(quán)限表").Range("A:A"))
maxc = Application.CountA(Sheets("權(quán)限表").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("權(quán)限表").Cells(1, i)
k = Worksheets("權(quán)限表").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("權(quán)限表").Cells(j, i) = "是" Then
Sheets(j - 2).Visible = xlSheetVisible
Else
Sheets(j - 2).Visible = xlSheetVeryHidden
End If
Next j
If Sheets("權(quán)限表").Visible = xlSheetVisible Then
pw = "excelinexcel"
Sheets("權(quán)限表").Unprotect Password = pw
Cells.Select
Selection.EntireColumn.Hidden = False
End If
Exit Sub
End If
Next i
MsgBox "用戶名或密碼錯(cuò)誤!"
End Sub
2.雙擊窗體中的“取消”按鈕,同樣粘貼下述VBA代碼。該段代碼功能很簡(jiǎn)單,即退出Excel。
Private Sub CommandButton2_Click()
Application.DisplayAlerts = False
Unload Me
Application.Visible = True
Application.Quit
Application.EnableEvents = False
End Sub
3. 在兩段代碼的下方,粘貼以下VBA代碼,用于防止用戶通過(guò)關(guān)閉窗體入侵。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> 1 Then Cancel = True
End Sub
4. 雙擊對(duì)象窗口中的ThisWorkbook,將下方代碼粘貼到代碼窗口中去。這兩段代碼實(shí)現(xiàn)了打開(kāi)工作簿即彈出窗體開(kāi)始驗(yàn)證,并保護(hù)和隱藏工作表行列,避免用戶通過(guò)禁用宏來(lái)越權(quán)查看。
工作簿打開(kāi)事件代碼:
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 <> "權(quán)限表" 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
工作簿關(guān)閉事件代碼
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Application.EnableCancelKey = xlDisabled
Application.Visible = False
UserForm1.Show
End Sub
5. 保護(hù)VBA工程,確保用戶無(wú)法刪除、查看或修改。
操作步驟:
點(diǎn)擊【工具】-【VBAProject屬性】,彈出【VBAProject-工程屬性】對(duì)話框,選擇【保護(hù)】選項(xiàng)卡,輸入【查看工程屬性的密碼】,點(diǎn)擊【確定】即可。
完成以上操作步驟,一套完美的多人運(yùn)動(dòng)表格就搞定了,車也就開(kāi)完了。此時(shí)關(guān)閉Excel再次打開(kāi)即可體驗(yàn)多人運(yùn)動(dòng)的快感,隨文附上演示作品,快拿去把玩把玩吧!最后,以一段打油詩(shī)結(jié)束今天的分享,下次再見(jiàn)吧!
多人運(yùn)動(dòng)有是非,
一不小心就被黑。
學(xué)它幾句VBA,
再也不怕把鍋背。
總結(jié)
- 上一篇: body 没有被撑开_body没有高度设
- 下一篇: webrtc笔记(5): 基于kuren