用VBA製做EXCEL登入系統?

Tags: 系統, excel,

在工作中可能遇到這種情況,就是有一個錄入工作需要多人協同完成,每個人所要錄入的部份又不相同,於是就在同一個EXCEL工作簿中建立多個工作表,當某一個人錄入時,只打開他需要操作的那個工作表,其他工作表自動隱藏起來,防止被誤操作。
我看到網上有不少朋友在找有這個功能的表格,於是就試著做了一個,跟大家分享一下。
注意:由於EXCEL的VBA安全性非常低,網上有很多破解的方法,所以對那些資料安全性要求較高的請不要用這種方法。
一、表格部份
這個工作簿中有多個工作表,分成三類。
第一類:工作簿的第一個工作表,裡面沒有資料,只用於顯示登入視窗,起名為“登入”。由於在VBA程式碼中要呼叫這個工作表,在實際使用時,這個名字不要改動。
第二類:工作簿的第二個工作表,裡面儲存了各登入人員的姓名、登入密碼以及各人要操作的工作表(許可權),起名為“設定”,這個工作表的名字同樣不要修改,裡面的資料位置也不要改動。
第三類:工作簿的第三及以後的工作表,這些表都是登入人員要操作的表格,應根據自己的需要設定,我為了介紹方便,給他們起名為“表一”、“表二”、...,可以新增多個,表的名字也可任意。
在做上面這些表時,只要注意“登入”表的名字不要改、“設定”表的名字與資料位置不要改,其他部份可隨意。
提示:如果非要改變“登入”表與“設定”表的名字,必須在EXCEL中改名後,把VBA程式碼中相關的名字也改過來才能正常使用。
二、VBA部份
上面表格部份完成後,就需要做VBA程式碼了,在EXCEL視窗按ALT+F11調出VBA視窗。
1、登入窗體
在工具欄中按“插入-使用者窗體”,新增一個窗體。
將插入的窗體調整到適當大小。
2、程式碼
在所新增的窗體上雙擊滑鼠,然後把下面程式碼貼上進去:
Private Sub CommandButton1_Click()
On Error GoTo 10 '當姓名與密碼不對應時,會出現錯誤,轉到10語句處理
Dim n As String
Set sh = Sheets("設定")
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) '取出“設定”表中的許可權密碼,字元型
If n <> ps Then GoTo 10
Call 隱藏表
'檢查一下“設定”表的C列及右邊各格中的內容,有內容的,說明可以開啟內容所指定的工作表
For i = 4 To 255
b = sh.Cells(s, i).Value
If b = 1 And sh.Cells(1, i) <> "" Then '單元格為1時,表示有許可權開啟這個表,就讓它顯示出來
Sheets(sh.Cells(1, i).Value).Visible = -1
End If
Next
Unload UserForm1 '退出窗體
Exit Sub
10:
MsgBox "姓名或密碼錯誤,不能登入", , "提示"
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()
'窗體出現在螢幕上的位置
Me.Top = 220
Me.Left = 120
End Sub
程式碼中都做了註釋,看不明白也不影響使用,只要貼上上就行了。
再用滑鼠雙擊左側的thisworkbook模組,把下面程式碼貼上上去。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call UserForm1.隱藏表
ActiveWorkbook.Save '儲存當前工作簿文件
End Sub
Private Sub Workbook_Open()
Call UserForm1.隱藏表
UserForm1.Show '載入登入窗體
End Sub
再用滑鼠雙擊左側“設定”表模組,把下面程式碼貼上上去。
Private Sub Worksheet_Activate()
'將各工作表的名字填入第一行中
For i = 2 To Worksheets.Count
Cells(1, i + 2) = Sheets(i).Name
Next
End Sub
再用滑鼠雙擊左側“登入”表模組,把下面程式碼貼上上去。
最後給VBA加上一個保護密碼,防止其他人員改動程式碼。
按“工具-VBA Project屬性”,調出“VBA Project”屬性視窗,選“保護”選項卡,按下圖設定就行了。
至此就完成了整個製做過程,關閉VBA視窗回到EXCEL視窗,就可以在這個工作簿中新增你要操作的全部工作表了,注意新增的位置在“設定”工作表的右邊。
使用時的注意事項:
1、在“登入”工作表中,登入窗體是自動顯示的,只要輸入姓名、密碼正確,按“登入”按鈕,就會根據“設定”表中的許可權,自動開啟該操作者所要操作的工作表,與他無關的表會自動隱藏。
2、當以管理員身份(本例中的“張三”)登入後,只要一開啟“設定”工作表,就能自動在D1單元格及右邊的各單元格中更新工作表名字。
3、任何操作者在操作完成後,要在“登入”窗體上點選“退出”按鈕,以便關閉所操作的工作表。
4、為了保證登入功能正常執行,在開啟工作簿時一定要啟用巨集。另外,為了保證工作簿在關閉時只顯示“登入”工作表,會自動將其他表隱藏並儲存工作簿。
補充說明:
如果想在登入視窗的密碼框不顯示“明文”,只顯示一串星號“***”,可以用下面方法設定。
開啟VBA視窗,用滑鼠選中登入窗體的密碼文字框textbox2,在左邊“屬性”視窗中找到passwordChar屬性,輸入一個星號就行了。
補充2
有朋友提出,在顯示登入視窗時,不想手工輸入“姓名”,最好用下拉框選擇“姓名”,想實現這個功能,只要把登入視窗中的姓名“文字框”刪除,換成一個“複合框”,再改一下程式碼就可以了。
1、改文字框為複合框
2、修改程式碼
分兩步,先把原始碼中的所有“TextBox1.Text”替換成“ComboBox1.Text”(提示:可以在VBA視窗中按“編輯-替換”,輸入內容後選“全部替換”即可)。
再將原始碼中的下面這段:
Private Sub UserForm_Activate()
'窗體出現在螢幕上的位置
Me.Top = 220
Me.Left = 120
End Sub
替換成:
Private Sub UserForm_Activate()
'窗體出現在螢幕上的位置
Me.Top = 220
Me.Left = 120
For i = 2 To Sheets("設定").[a65536].End(xlUp).Row
ComboBox1.AddItem Sheets("設定").Cells(i, 1).Value
Next
End Sub
這樣就可以使用了。

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

用VBA製做EXCEL登入系統

系統, excel,
相關問題答案