乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      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版】,打開(kāi)文件就是一個(gè)用戶登錄界面,今天我們就一起來(lái)動(dòng)手重新做一個(gè)這樣的登錄界面,用戶名+密碼登錄EXCEL,具體代碼與中醫(yī)診所收費(fèi)系統(tǒng)中的不一樣,我們不去管它,條條大路通羅馬。

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

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

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

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

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

      4、打開(kāi)VBE,即Visual Basic編輯器,插入用戶窗體:

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

      6、打開(kāi)工具箱,在窗體上添加控件:

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

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

      2)文本TxbUserID,TxtPassWord,用來(lái)輸入信息。在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方法,過(guò)程名稱就改成:Private Sub UserForm_Initialize()

      代碼簡(jiǎn)析:定義模塊級(jí)變量,以便在本窗體其他過(guò)程中引用它們的值。窗體啟動(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)擊“登錄”按鈕    '判斷一下有沒(méi)有輸入用戶ID,    '如果為空,提示信息,然后退出    If Me.TxbUserID = "" Then        MsgBox "請(qǐng)輸入用戶ID!"        Exit Sub    End If        '根據(jù)輸入的用戶ID,在用戶信息(arr())中查找有沒(méi)有此用戶ID    '如果循環(huán)結(jié)束,仍然沒(méi)有找到    '則表明沒(méi)有此用戶,通過(guò)變量k來(lái)判斷,如果找到,使之為1    '如果找到匹配的用戶ID,再比較用戶輸入的密碼與arr()中的密碼是否一致    '如果一致,退出窗體,結(jié)束循環(huán)(Exit For),也可以直接結(jié)束過(guò)程(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

      代碼簡(jiǎn)析:代碼塊亦有注釋。

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

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

      如果沒(méi)有找到用戶ID則提示用戶重新輸入用戶ID。

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

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

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

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

      (b)SQL語(yǔ)句:查詢“tb用戶”表中,用戶ID=TxbUserID的密碼。這種方法要建立數(shù)據(jù)連接,我們前面分享過(guò)【Excel VBA 憑證打印/SQL連接Eexcel文件/Listview控件/CommandButton命令按鈕控件】這里不再重復(fù),有興趣的朋友可以自行測(cè)試研究。這種方法還可以用于數(shù)據(jù)存儲(chǔ)在Access數(shù)據(jù)庫(kù)的情況,我們后續(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

      代碼簡(jiǎn)析:窗體退出,包括用戶點(diǎn)擊窗體右上角的X按鈕。主要是防止用戶在沒(méi)有正確輸入用戶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

      后來(lái)又修改了代碼,圖就不改了。

      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

      代碼簡(jiǎn)析

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

      工作簿關(guān)閉時(shí),先把"tb用戶"表深度隱藏,再保存工作簿,如果僅有本工作簿處于打開(kāi)狀態(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文件正常打開(kāi),包括后續(xù)點(diǎn)擊重新登錄時(shí),再點(diǎn)擊“退出”按鈕,程序不會(huì)退出。如果為0,則表明用戶沒(méi)有正常登錄,我們直接退出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)該)通過(guò)窗體來(lái)增加、修改、刪除用戶信息,由于時(shí)間關(guān)系,就不再寫代碼了,以后再完善。
      基本差不多了,我們來(lái)看一下成品:

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

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

        0條評(píng)論

        發(fā)表

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

        類似文章 更多