电竞比分网-中国电竞赛事及体育赛事平台

分享

EXCEL登錄系統(tǒng)

 xsy我可以很好 2011-07-19
用VBA制做EXCEL登錄系統(tǒng)
2011-07-04 15:54

      在工作中可能遇到這種情況,就是有一個(gè)錄入工作需要多人協(xié)同完成,每個(gè)人所要錄入的部份又不相同,于是就在同一個(gè)EXCEL工作簿中建立多個(gè)工作表,當(dāng)某一個(gè)人錄入時(shí),只打開他需要操作的那個(gè)工作表,其他工作表自動(dòng)隱藏起來,防止被誤操作。
我看到網(wǎng)上有不少朋友在找有這個(gè)功能的表格,于是就試著做了一個(gè),跟大家分享一下。
注意:由于EXCEL的VBA安全性非常低,網(wǎng)上有很多破解的方法,所以對(duì)那些數(shù)據(jù)安全性要求較高的請(qǐng)不要用這種方法。

一、表格部份

這個(gè)工作簿中有多個(gè)工作表,分成三類。

第一類:工作簿的第一個(gè)工作表,里面沒有數(shù)據(jù),只用于顯示登錄窗口,起名為“登錄”。由于在VBA代碼中要調(diào)用這個(gè)工作表,在實(shí)際使用時(shí),這個(gè)名字不要改動(dòng)。

第二類:工作簿的第二個(gè)工作表,里面存儲(chǔ)了各登錄人員的姓名、登錄密碼以及各人要操作的工作表(權(quán)限),起名為“設(shè)置”,這個(gè)工作表的名字同樣不要修改,里面的數(shù)據(jù)位置也不要改動(dòng)。

第三類:工作簿的第三及以后的工作表,這些表都是登錄人員要操作的表格,應(yīng)根據(jù)自己的需要設(shè)置,我為了介紹方便,給他們起名為“表一”、“表二”、...,可以添加多個(gè),表的名字也可任意。

在做上面這些表時(shí),只要注意“登錄”表的名字不要改、“設(shè)置”表的名字與數(shù)據(jù)位置不要改,其他部份可隨意。

提示:如果非要改變“登錄”表與“設(shè)置”表的名字,必須在EXCEL中改名后,把VBA代碼中相關(guān)的名字也改過來才能正常使用。

二、VBA部份
上面表格部份完成后,就需要做VBA代碼了,在EXCEL窗口按ALT+F11調(diào)出VBA窗口。
1、登錄窗體
在工具欄中按“插入-用戶窗體”,添加一個(gè)窗體。
將插入的窗體調(diào)整到適當(dāng)大小。

2、代碼
在所添加的窗體上雙擊鼠標(biāo),然后把下面代碼粘貼進(jìn)去:


Private Sub CommandButton1_Click()
On Error GoTo 10 '當(dāng)姓名與密碼不對(duì)應(yīng)時(shí),會(huì)出現(xiàn)錯(cuò)誤,轉(zhuǎn)到10語(yǔ)句處理
Dim n As String
Set sh = Sheets("設(shè)置")
na = TextBox1.Text: ps = TextBox2.Text '取得登錄窗口中的姓名與密碼
If na = "" Or ps = "" Then MsgBox "未輸入用戶名或密碼,不能登錄", , "提示": Exit Sub
s = WorksheetFunction.Match(na, sh.[a:a], 0) '查找用戶在A列的位置
n = sh.Cells(s, 2) '取出“設(shè)置”表中的權(quán)限密碼,字符型
If n <> ps Then GoTo 10
Call 隱藏表
'檢查一下“設(shè)置”表的C列及右邊各格中的內(nèi)容,有內(nèi)容的,說明可以打開內(nèi)容所指定的工作表
For i = 4 To 255
    b = sh.Cells(s, i).Value
    If b = 1 And sh.Cells(1, i) <> "" Then '單元格為1時(shí),表示有權(quán)限打開這個(gè)表,就讓它顯示出來
        Sheets(sh.Cells(1, i).Value).Visible = -1
    End If
Next
Unload UserForm1 '退出窗體
Exit Sub
10:
MsgBox "姓名或密碼錯(cuò)誤,不能登錄", , "提示"
End Sub

Sub 隱藏表()
TextBox1.Text = "": TextBox2.Text = ""
For i = 1 To Worksheets.Count
  If Sheets(i).Name <> "登錄" Then
    Sheets(i).Visible = 2
  Else
    Sheets(i).Visible = -1 '只讓“登錄”表顯示出來
  End If
Next
End Sub

Private Sub CommandButton2_Click()
Call 隱藏表
End Sub

Private Sub UserForm_Activate()
'窗體出現(xiàn)在屏幕上的位置
Me.Top = 220
Me.Left = 120
End Sub

 

代碼中都做了注釋,看不明白也不影響使用,只要粘貼上就行了。

 

再用鼠標(biāo)雙擊左側(cè)的thisworkbook模塊,把下面代碼粘貼上去。


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call UserForm1.隱藏表
ActiveWorkbook.Save '保存當(dāng)前工作簿文檔
 End Sub

Private Sub Workbook_Open()
Call UserForm1.隱藏表
UserForm1.Show '加載登錄窗體
End Sub

 

再用鼠標(biāo)雙擊左側(cè)“設(shè)置”表模塊,把下面代碼粘貼上去。

Private Sub Worksheet_Activate()
'將各工作表的名字填入第一行中
For i = 2 To Worksheets.Count
    Cells(1, i + 2) = Sheets(i).Name
Next
End Sub

 

再用鼠標(biāo)雙擊左側(cè)“登錄”表模塊,把下面代碼粘貼上去。

最后給VBA加上一個(gè)保護(hù)密碼,防止其他人員改動(dòng)代碼。
按“工具-VBA Project屬性”,調(diào)出“VBA Project”屬性窗口,選“保護(hù)”選項(xiàng)卡,按下圖設(shè)置就行了。

至此就完成了整個(gè)制做過程,關(guān)閉VBA窗口回到EXCEL窗口,就可以在這個(gè)工作簿中添加你要操作的全部工作表了,注意添加的位置在“設(shè)置”工作表的右邊。


使用時(shí)的注意事項(xiàng):
1、在“登錄”工作表中,登錄窗體是自動(dòng)顯示的,只要輸入姓名、密碼正確,按“登錄”按鈕,就會(huì)根據(jù)“設(shè)置”表中的權(quán)限,自動(dòng)打開該操作者所要操作的工作表,與他無關(guān)的表會(huì)自動(dòng)隱藏。
2、當(dāng)以管理員身份(本例中的“張三”)登錄后,只要一打開“設(shè)置”工作表,就能自動(dòng)在D1單元格及右邊的各單元格中更新工作表名字。
3、任何操作者在操作完成后,要在“登錄”窗體上點(diǎn)擊“退出”按鈕,以便關(guān)閉所操作的工作表。
4、為了保證登錄功能正常運(yùn)行,在打開工作簿時(shí)一定要啟用宏。另外,為了保證工作簿在關(guān)閉時(shí)只顯示“登錄”工作表,會(huì)自動(dòng)將其他表隱藏并保存工作簿。

補(bǔ)充說明:
如果想在登錄窗口的密碼框不顯示“明文”,只顯示一串星號(hào)“***”,可以用下面方法設(shè)置。
打開VBA窗口,用鼠標(biāo)選中登錄窗體的密碼文本框textbox2,在左邊“屬性”窗口中找到passwordChar屬性,輸入一個(gè)星號(hào)就行了。

 

補(bǔ)充2
有朋友提出,在顯示登錄窗口時(shí),不想手工輸入“姓名”,最好用下拉框選擇“姓名”,想實(shí)現(xiàn)這個(gè)功能,只要把登錄窗口中的姓名“文本框”刪除,

換成一個(gè)“復(fù)合框”,再改一下代碼就可以了。
1、改文本框?yàn)閺?fù)合框

2、修改代碼
分兩步,先把原代碼中的所有“TextBox1.Text”替換成“ComboBox1.Text”(提示:可以在VBA窗口中按“編輯-替換”,輸入內(nèi)容后選“全部替換”

即可)。
再將原代碼中的下面這段:
Private Sub UserForm_Activate()
'窗體出現(xiàn)在屏幕上的位置
Me.Top = 220
Me.Left = 120
End Sub

替換成:
Private Sub UserForm_Activate()
'窗體出現(xiàn)在屏幕上的位置
Me.Top = 220
Me.Left = 120
For i = 2 To Sheets("設(shè)置").[a65536].End(xlUp).Row
    ComboBox1.AddItem Sheets("設(shè)置").Cells(i, 1).Value
Next
End Sub

這樣就可以使用了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多