小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Excel VBA 用戶窗體設(shè)置/一步一步代你設(shè)計(jì)EXCEL用戶+密碼登錄界面

 冷茶視界 2023-11-15 發(fā)布于江蘇

☆本期內(nèi)容概要☆

  • 用戶窗體設(shè)置、用戶ID+密碼登錄設(shè)計(jì)

  • 設(shè)計(jì)思路、代碼分步演示

前兩天我們分享了一個(gè)完整的EXCEL小應(yīng)用【中醫(yī)診所收費(fèi)系統(tǒng):【重磅】Excel VBA 應(yīng)用分享/中醫(yī)診所收費(fèi)系統(tǒng)/Excel+ListBox版】,打開文件就是一個(gè)用戶登錄界面,今天我們就一起來動(dòng)手重新做一個(gè)這樣的登錄界面,用戶名+密碼登錄EXCEL,具體代碼與中醫(yī)診所收費(fèi)系統(tǒng)中的不一樣,我們不去管它,條條大路通羅馬。

設(shè)計(jì)思路與過程分步演示:

1、新建一個(gè)excel文件,另存為啟用宏的工作簿,名稱隨意,我這里命名為:窗體登錄(用戶名+密碼).xlsm

2、在excel文件中,把sheet1重命名為“Main”,作為主界面使用,在其上插入一個(gè)命令按鈕CmdLogin,Caption改為“重新登錄”。這個(gè)主界面今后可以作為進(jìn)入其他窗體、表頁的入口。目前就放一個(gè)重新登錄的按鈕。

3、插入一張工作表,重命名為“tb用戶”,輸入用戶信息:

這張表存有重要信息,我們最后會(huì)把它深度隱藏,在工作表界面是看不到它的。要是能看到,密碼豈不是形同虛設(shè)?

4、打開VBE,即Visual Basic編輯器,插入用戶窗體:

5、把窗體名稱修改為Usf_Login,Caption修改為“用戶登錄”:

6、打開工具箱,在窗體上添加控件:

(1)標(biāo)簽:LbTitle,Caption系統(tǒng)登錄;Label1,Caption“用戶ID:”;Label2,Caption“密  碼:”,字體大小位置適當(dāng)調(diào)整,背景調(diào)成透明。

其他控件屬性調(diào)整如法炮制,不再贅述。如果沒有看到屬性窗口,可以右擊任意控件,在彈出的菜單中點(diǎn)“屬性”,然后點(diǎn)擊相應(yīng)控件則切換到該控件的“屬性”。

2)文本TxbUserID,TxtPassWord,用來輸入信息。在TxtPassWord的屬性中,設(shè)置密碼掩碼(PasswordChar)為*。

(3)命令按鈕:CmdLogin,Caption“登錄”,CmdExit,Caption“退出”。

7、編寫代碼:

(1)雙擊用戶窗體,點(diǎn)選右側(cè)方法與事件,選擇Activate或者Initialize,輸入代碼:

Dim arr()Dim iRow As Integer, iCol As IntegerDim PsW As String
Private Sub UserForm_Activate() ThisWorkbook.Activate Sheets("tb用戶").Activate With Sheets("tb用戶") iRow = .UsedRange.Rows.Count iCol = .UsedRange.Columns.Count arr = .Range(Cells(1, 1), Cells(iRow, iCol)).Value End With 'StopEnd Sub
如果用Initialize方法,過程名稱就改成:Private Sub UserForm_Initialize()

代碼簡析:定義模塊級(jí)變量,以便在本窗體其他過程中引用它們的值。窗體啟動(dòng),讀取用戶信息表到數(shù)組arr(),用于后續(xù)登錄時(shí)的信息比對(duì)。Activate與Initialize在窗體啟動(dòng)時(shí),都會(huì)運(yùn)行其中的代碼,區(qū)別是Activate方法下,窗體重新激活就會(huì)再次運(yùn)行代碼,Initialize只在窗體啟動(dòng)時(shí)運(yùn)行,再次激活時(shí)不會(huì)運(yùn)行。

(2)雙擊登錄按鈕,輸入代碼:

Private Sub CmdLogin_Click()    '點(diǎn)擊“登錄”按鈕    '判斷一下有沒有輸入用戶ID,    '如果為空,提示信息,然后退出    If Me.TxbUserID = "" Then        MsgBox "請(qǐng)輸入用戶ID!"        Exit Sub    End If        '根據(jù)輸入的用戶ID,在用戶信息(arr())中查找有沒有此用戶ID    '如果循環(huán)結(jié)束,仍然沒有找到    '則表明沒有此用戶,通過變量k來判斷,如果找到,使之為1    '如果找到匹配的用戶ID,再比較用戶輸入的密碼與arr()中的密碼是否一致    '如果一致,退出窗體,結(jié)束循環(huán)(Exit For),也可以直接結(jié)束過程(Exit sub)    For i = 1 To iRow        If arr(i, 2) = Me.TxbUserID Then            k = 1            If CStr(arr(i, 4)) = Me.TxtPassWord Then                Sheets("Main").Activate                Sheets("tb用戶").Visible = 2    '深度隱藏                currUserID = arr(i, 2)                currUserName = arr(i, 3)                '把登錄用戶信息記到Sheets("Main")                Sheets("Main").Range("A1") = "用戶ID:"                Sheets("Main").Range("A2") = "用戶姓名:"                Sheets("Main").Range("B1") = currUserID                Sheets("Main").Range("B2") = currUserName                LoginStatus = 1                Unload Me                Exit For            Else                MsgBox "密碼不正確,請(qǐng)重新輸入!"                Me.TxtPassWord = ""                Me.TxtPassWord.SetFocus            End If        End If    Next    If k = 0 Then        MsgBox "不存在此用戶,請(qǐng)重新輸入!"    End IfEnd Sub

代碼簡析:代碼塊亦有注釋。

CmdLogin的Click事件,把用戶輸入的用戶ID與密碼跟arr()中的數(shù)據(jù)進(jìn)行比對(duì),

如果找到用戶ID,則比較密碼,如果密碼相符,則登錄成功,退出窗體,如果密碼不符,則不能登錄,清空已輸入的密碼,并把焦點(diǎn)放到TxtPassWord,以便再次輸入;

如果沒有找到用戶ID則提示用戶重新輸入用戶ID。

這里有個(gè)公共變量LoginStatus,如果用戶正常登錄,其值為1,在后面退出窗體的代碼中會(huì)用到。

公共變量currUserID,currUserName存下當(dāng)前用戶的信息,供后續(xù)過程使用,比如憑證制單中的制單人,憑證審核中的審核人等需要用到當(dāng)前用戶名稱的地方。

關(guān)于用戶ID與密碼校驗(yàn),還有其他方法:

(a)Vlookup工作表函數(shù):查找用戶ID對(duì)應(yīng)的密碼值,與TxbPassWord的值進(jìn)行比較,再進(jìn)行相應(yīng)處理。

(b)SQL語句:查詢“tb用戶”表中,用戶ID=TxbUserID的密碼。這種方法要建立數(shù)據(jù)連接,我們前面分享過【Excel VBA 憑證打印/SQL連接Eexcel文件/Listview控件/CommandButton命令按鈕控件】這里不再重復(fù),有興趣的朋友可以自行測(cè)試研究。這種方法還可以用于數(shù)據(jù)存儲(chǔ)在Access數(shù)據(jù)庫的情況,我們后續(xù)可能會(huì)遇到,界時(shí)再詳細(xì)闡述。

(3)繼續(xù)輸入窗體退出代碼:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)    If LoginStatus = 0 Then    ThisWorkbook.Save        If Workbooks.Count > 1 Then            ThisWorkbook.Close savechanges:=False        Else            Application.Quit        End If    End IfEnd Sub

代碼簡析:窗體退出,包括用戶點(diǎn)擊窗體右上角的X按鈕。主要是防止用戶在沒有正確輸入用戶ID、密碼的情況下,點(diǎn)擊窗體右上角的X按鈕退出窗體,從而直接進(jìn)入EXCEL工作簿。

如果用戶正常登錄,此時(shí)LoginStatus的值應(yīng)為1,如果為0,則表明用戶非正常進(jìn)入,我們就退出EXCEL文件。

(4)CmdExit(退出)按鈕點(diǎn)擊事件:

Private Sub CmdExit_Click()    Unload MeEnd Sub

(5)ThisworkBook

后來又修改了代碼,圖就不改了。

Private Sub Workbook_BeforeClose(Cancel As Boolean)    ThisWorkbook.Activate    Sheets("tb用戶").Visible = 2    Sheets("Main").Range("A1:B2").ClearContents    ThisWorkbook.Save    If Workbooks.Count > 1 Then        ThisWorkbook.Close savechanges:=False    Else        Application.Quit    End IfEnd Sub
Private Sub Workbook_Open() UsF_Login.ShowEnd Sub

代碼簡析

工作簿打開時(shí),激活UsF_Login窗體,等待用戶輸入用戶ID與密碼進(jìn)入。

工作簿關(guān)閉時(shí),先把"tb用戶"表深度隱藏,再保存工作簿,如果僅有本工作簿處于打開狀態(tài),則關(guān)閉EXCEL程序,否則僅關(guān)閉本工作簿,保持其他工作簿不被關(guān)閉。

(6)插入用戶模塊(如果已有則不用插入),名稱應(yīng)該是“模塊1”,可改可不改,這里我改為“MyModule”,以示區(qū)別。設(shè)置Public變量:

Public LoginStatus As IntegerPublic currUserID As StringPublic currUserName As String

用戶登錄成功后,LoginStatus的值為1,在用戶窗體退出代碼中用到此變量,如果為1,則窗體退出時(shí)僅僅是退出窗體,EXCEL文件正常打開,包括后續(xù)點(diǎn)擊重新登錄時(shí),再點(diǎn)擊“退出”按鈕,程序不會(huì)退出。如果為0,則表明用戶沒有正常登錄,我們直接退出EXCEL。

(7)“Main”工作表中CmdLogin(重新登錄)命令按鈕:

Private Sub CmdLogin_Click()    UsF_Login.ShowEnd Sub

8、給VBA工程添加密碼,保護(hù)工程。防止別人進(jìn)入VBE編輯器查看到密碼。保護(hù)密碼這里設(shè)為0,各位可自行設(shè)置。

9、如果要查看、修改“tb用戶”表信息,暫時(shí)可以在VBE窗口把它的visible屬性改為-1,也可以使用代碼顯示它,甚至(也應(yīng)該)通過窗體來增加、修改、刪除用戶信息,由于時(shí)間關(guān)系,就不再寫代碼了,以后再完善。
基本差不多了,我們來看一下成品:

另外,該EXCEL文檔,在關(guān)閉時(shí),會(huì)自動(dòng)保存數(shù)據(jù)。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

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

    類似文章 更多