分享

如何用定义名称来对用户进行管理

 Excel实用知识 2022-02-27

在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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多