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

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

    • 分享

      用VBA編程實現(xiàn)Excel的登錄功能

       星之明光 2011-08-27
      用VBA編程實現(xiàn)Excel的登錄功能

      通常一提到編程,您可能馬上會想到C語言、C++語言、Delphi等,以及它們種種煩瑣的類型說明、定義等,讓人覺得延時廢力,開發(fā)效率不高。相對而言,MircrosoftOffice2000中的VisualBasic(VBA)則編程簡便,其所提供的各種控件和交互式的編程方式可以很輕易地編出合格的程序,完成自己的任務。VBA是VisualBasic的一個子集,它可以廣泛地應用于微軟公司開發(fā)的各種軟件中,使用好VBA就能更方便地操作Office2000,更深入地開發(fā)其強大功能,使用戶能方便快捷地定制和擴展Office2000系統(tǒng),并能讓各個Office軟件更好地協(xié)同工作。
      從編程工作實踐看,VBA的最大優(yōu)點在于它不像其它編程語言要事無巨細,全靠自己打理,而是依托于Office2000的強大功能,在其基礎上加以一定的拓展、補充,通過精心設計實現(xiàn)強大的編程功能。
      一、登錄相關的用戶、口令信息存放
      最方便的方法就是存放在工作簿的一張表中,表名為“Users”,無需像其它數(shù)據(jù)庫系統(tǒng)設計什么字段名、字段類型,直接錄入信息即可,錄入完成后也就同時實現(xiàn)了表結(jié)構的設計,如圖1所示:

       

       


      圖1
      注重:圖1所示的“Users”表中的B1單元中的數(shù)據(jù)是動態(tài)的,它負責記錄下當前登錄的用戶名,如您所想,是在登錄成功后緊接著記錄下當前登錄用戶名,這樣我們在用VBA編程時,就可以很方便地使用“Sheets(“Users”)。Cells(1,2)”表達式的內(nèi)容來知道當前登錄的用戶名,從而可以對其分別賦予不同的操作權限,這也正是我們要設計不同登錄用戶的初衷。至于如何記錄下此信息,將在下面的登錄窗口編程中加以詳述。
      從“Users”表的A3到B103,分別存放各個用戶名和相應的密碼。實際上Excel表的最大行數(shù)可以到65535行,但在實際應用中根本不需要這么多,可以用A3:B103(共100行)作為存放用戶名和密碼的范圍。
      二、登錄窗口的設計及其代碼實現(xiàn)
      為了實現(xiàn)登錄功能,一個設計良好的登錄窗口是必不可少的,在VBA中實現(xiàn)這一點很輕易,進入Ex?鄄cel后按下“Alt+F11”即可進入VBA設計環(huán)境,選擇菜單命令“插入/用戶窗體”,插入一個窗體。
      通過VBA環(huán)境方便的拖放控件功能,可以很方便地設計一個對話框,我們給它取名為“FrmLogin”,并且為其中關鍵的控件分別取上有意義的名字,詳見圖2。

       

      圖2
      右擊“FrmLogin”打開右鍵菜單,選擇“查看代碼”,進入其代碼設計窗口。首先,我們想自動從表“Users”的范圍A1:B103中自動提取所有用戶名填充進復合框CboName,很明顯的,執(zhí)行該功能的最佳時機是響應窗體對象“FrmLogin”的“Initialize”事件,首先生成該事件的代碼框架。
      生成的框架代碼如下:
      PrivateSubUserForm_Initialize()
      EndSub
      此時就可以在其中添加代碼,如下:
      PrivateSubUserForm_Initialize()
      ’將CboName風格設置為只答應列表選擇,而不能自行輸入
      CboName。Style=fmStyleDropDownList
      ’設定其數(shù)據(jù)源
      CboName。RowSource=“用戶名“
      ’設置鍵盤焦點
      CboName。SetFocus
      EndSub

      代碼各行已經(jīng)有了詳盡的注釋(盡量用在代碼中用加注釋的方式加以說明),唯一讓讀者覺得含糊的可能就是“用戶名”從何而來它實際上是表“Users”范圍A3:A103的一個引用別名。這樣,通過“FrmLogin”的UserForm_Initialize代碼,窗體在啟動時自動向CboName中填入相關的用戶名數(shù)據(jù),供終端用戶選擇。
      下面分別選擇代碼編輯窗口上方的“對象”和“事件”組合框,響應如下事件:
      響應“CboName”組合框?qū)ο蟮?#8220;Change”事件:
      PrivateSubCboName_Change()
      ’用戶名改變后將鍵盤焦點設置在“口令”TxtPass處
      TxtPass。SetFocus
      EndSub
      響應“CmdCancel”(取消按鈕)對象的“Click”事件:
      PrivateSubCmdCancel_Click()
      ’用戶按了“取消”按鈕,即不登錄,那么關閉Excel,因尚未編輯所以不保存改變
      ThisWorkbook。Closesavechanges:=False
      Application。Quit
      EndSub
      響應“CmdOK”(確定按鈕)對象的“Click”事件:
      PrivateSubCmdOK_Click()
      ’定義一個整型變量FindRow
      DimFindRowAsInteger
      WithSheets(“Users“)
      ’在“Users”表中A3:A103找到與CboName相匹配用戶名的對應行數(shù)
      FindRow=。Range(“A3:A103“)。Find(What:=CboName)。Row
      IfCboName。Value=““Then
      ’假如登錄名為空,屬誤操作,退出本次點擊事件,繼續(xù)登錄
      MsgBox“登錄系統(tǒng)請先選擇用戶名!“,vbInfor?鄄mation,“系統(tǒng)提示“
      ExitSub
      EndIf
      If。Cells(FindRow,2)&lt;&gt;CStr(TxtPass。Text)Then
      ’假如密碼不匹配,不能通過,繼續(xù)登錄
      MsgBox“未授權的錯誤密碼!“,vbCritical,“系統(tǒng)消息“
      ExitSub
      EndIf
      EndWith
      ’登錄成功,在Users表B1處記錄下當前用戶名
      Sheets(“Users“)。Cells(1,2)=FrmLogin。CboName。Value
      ’卸載登錄窗口,退出登錄界面
      UnloadMe
      EndSub
      三、登錄窗口的啟動及其它問題
      假如該登錄窗體不能被啟動,那么為其編寫的代碼將毫無用處,因為它們不會被執(zhí)行。我們必須在合適的地方和合適的時間來啟動登錄窗口。也就是說,我們要響應“ThisWorkbook”文檔對象的“Open”事件:
      PrivateSubWorkbook_Open()
      Application。Visible=False’隱藏應用程序窗口
      Application。EnableCancelKey=xlDisabled’不答應應用程序中止
      FrmLogin。Show1’模態(tài)啟動登錄對話框,進入登錄界面
      Application。WindowState=xlMaximized’登錄完成后窗口最大化
      Application。Visible=True’顯示應用程序窗口
      Application。EnableCancelKey=xlInterrupt’答應應用程序中止
      EndSub
      此后還有一個問題:表“Users”存放著所有用戶的用戶名和口令,一個普通用戶登錄完后,就可以知道所有其他用戶的口令,這可不行。我們可以在文檔被關閉的瞬間,將“Users”表隱藏起來,也即響應“This?鄄Workbook”文檔對象的“BeforeClose”事件:
      PrivateSubWorkbook_BeforeClose(CancelAsBoolean)
      ’隱藏關鍵表“Users”
      ThisWorkbook。Sheets(“Users“)。Visible=xlSheetVery?鄄Hidden
      ’自動保存文檔
      Me。Save
      ’退出Excel
      Application。Quit
      EndSub
      這樣,只要文檔被關閉,表“Users”就自動隱藏了起來,而下次打開時該表仍被隱藏,對普通用戶而言沒什么不妥,而對Administrator而言,則有些不方便了,因為他要維護數(shù)據(jù)庫系統(tǒng),我們可以在Work?鄄book_Open事件的最下面添加如下代碼:
      ’判定登錄用戶是否是治理員,是則不再隱藏“Users”表
      IfSheets(“Users“)。Cells(1,2)=“Administrator“Then
      ThisWorkbook。Sheets(“Users“)。Visible=xlSheetVisi?鄄ble
      EndIf
      自登錄成功后,表“Users”的B1處就記錄下了當前登錄的用戶名,此時便發(fā)揮了它應有的作用。在實際工作中,該處記錄的作用會更明顯,可以對不同的用戶賦予不同的操作權限,如Administrator無所不能,普通用戶只能對數(shù)據(jù)進行追加操作而不能刪除,Guest用戶只能瀏覽而無操作權限等。

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多