在vba 中实现用户登录,并对登录用户进行身份识别,然后对用户进行分组管理,此类功能值得进一步思考。
这里介绍一种方法,利用Excel中的名称管理来进行身份识别,起到用户登录次数以及增减用户的功能。
定义名称在Excel中运用很方便,对于一些固定内容选择用定义名称来做下拉列表十分好,平时在做表格的时候经常会用到。
其实,名称以隐式状态存储,一般情况下也不会去检查是否存在,特别是一些刚学习excel的人来说,对此也并不十分了解。所以,在隐蔽性来说,有一点点可取之处。
具体方法就是,新建一个名称,然后依次对名称值进行累加,直到累加次数达到一定量就删除名称,也就是授权到期的意思,知道编程方法的人一定对此不陌生。
我做这个例子是一个循环累加,就是达到最大值后,又回到初始化0状态。
Excel似乎给我的感觉不十分严谨,就是说无论怎么做都达到想要的闭环、隐匿逻辑,也就没有所谓的秘密。以前经常破解word文档密码,感觉那种密码真的是不太有效,通过制作vba编程,也达不到想要的保密状态,所以,这个功能也只能是象征性实现一下登录的效果。
Private Sub CommandButton1_Click()
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 n As Integer, ni As Integer
MsgBox "第1次新建名称!", vbInformation, "新建名称"
Call newAddName(xname, 1)
Me.Label1.Caption = "这是第 1 次登录"
x = VBA.CInt(VBA.Right(na.Value, 1)) + 1
Call newAddName(xname, x)
MsgBox "这是第" & x & "次使用", vbInformation, "新建名称"
Me.Label1.Caption = "这是第 " & x & " 次登录"
MsgBox "你已使用次数到期!", vbInformation, "提示"
Me.Label1.Caption = "你已使用次数到期! "
Call newAddName(xname, 1)
MsgBox "这是第1次使用", vbInformation, "新建名称"
Me.Label1.Caption = "这是第 1 次登录"
特别注意:请谨慎使用下面的代码,如果在打开其它excel文件的同时使用,有可能删除掉你的定义名称。
For Each na In ThisWorkbook.Names