文/江覓易見
在vba 中實現用戶登錄,並對登錄用戶進行身份識別,然後對用戶進行分組管理,此類功能值得進一步思考。
這裡介紹一種方法,利用Excel中的名稱管理來進行身份識別,起到用戶登錄次數以及增減用戶的功能。
(文章附代碼,參考學習)
定義名稱在Excel中運用很方便,對於一些固定內容選擇用定義名稱來做下拉列表十分好,平時在做表格的時候經常會用到。
如何用定義名稱來對用戶進行管理
其實,名稱以隱式狀態存儲,一般情況下也不會去檢查是否存在,特別是一些剛學習excel的人來說,對此也並不十分了解。所以,在隱蔽性來說,有一點點可取之處。
具體方法就是,新建一個名稱,然後依次對名稱值進行累加,直到累加次數達到一定量就刪除名稱,也就是授權到期的意思,知道編程方法的人一定對此不陌生。
我做這個例子是一個循環累加,就是達到最大值後,又回到初始化0狀態。
實際應用及代碼
Excel似乎給我的感覺不十分嚴謹,就是說無論怎麼做都達到想要的閉環、隱匿邏輯,也就沒有所謂的秘密。以前經常破解word文檔密碼,感覺那種密碼真的是不太有效,通過製作vba編程,也達不到想要的保密狀態,所以,這個功能也只能是象徵性實現一下登錄的效果。
新建按鈕代碼
Private Sub CommandButton1_Click()
Dim xname As String
xname = InputBox("輸入名稱", "新建名稱", "Names")
xname = VBA.UCase(VBA.Trim(xname))
If VBA.IsNumeric(VBA.Left(xname, 1)) Then MsgBox "名稱第一個字符為字母或下劃線!", vbInformation, "提示": Exit Sub
If VBA.IsNumeric(xname) Then MsgBox "名稱不能數字!", vbInformation, "提示": Exit Sub
If VBA.Len(xname) = 0 Then MsgBox "空!": Exit Sub
Dim w As Workbook
Set w = ThisWorkbook
Dim na As Variant
Dim nArr()
Dim n As Integer, ni As Integer
ni = w.Names.Count
If ni = 0 Then
MsgBox "第1次新建名稱!", vbInformation, "新建名稱"
Call newAddName(xname, 1)
Me.Label1.Caption = "這是第 1 次登錄"
Exit Sub
End If
Dim x As Integer
Dim isIn As Boolean
isIn = False
For Each na In w.Names
If na.Name = xname Then
x = VBA.CInt(VBA.Right(na.Value, 1)) + 1
Call newAddName(xname, x)
MsgBox "這是第" & x & "次使用", vbInformation, "新建名稱"
Me.Label1.Caption = "這是第 " & x & " 次登錄"
If x > 2 Then
MsgBox "你已使用次數到期!", vbInformation, "提示"
delNames (na.Name)
Me.Label1.Caption = "你已使用次數到期! "
End If
isIn = True
End If
Next na
If Not isIn Then
Call newAddName(xname, 1)
MsgBox "這是第1次使用", vbInformation, "新建名稱"
Me.Label1.Caption = "這是第 1 次登錄"
End If
End Sub
刪除名稱代碼
特別注意:請謹慎使用下面的代碼,如果在打開其它excel文件的同時使用,有可能刪除掉你的定義名稱。
Dim na As Variant
For Each na In ThisWorkbook.Names
na.Delete
Next na
編後話:
最近一個月寫了一些文章,特別感謝那些提出問題,留言和反饋回來的朋友,很多問題可能不能及時發現,希望大家在應用的同時,修改一下,以解決在工作中遇到的各種困難。接下來會不斷總結一些小的經驗,分享出來,更多實用內容,盡請期待!