Excel 指定Windows用户名可立即取消对所有工作表的保护

Excel 指定Windows用户名可立即取消对所有工作表的保护,excel,vba,Excel,Vba,我想写一个简单的宏来一次解除所有的纸张保护。没问题。但我想做两个选择 首先使用inputbox写入密码。简单的 第二,我需要您的帮助,就是使用Windows用户名来定义允许在没有密码的情况下取消对其的保护(密码在已定义的代码中) 如何使用Environ.user定义哪个用户可以使用该宏 例如用户:第一个“hackla”和第二个“klaud” 我的基本代码看起来是这样的: Sub TabelleEntsperren() Dim strPassw As String Dim wSheet A

我想写一个简单的宏来一次解除所有的纸张保护。没问题。但我想做两个选择

首先使用inputbox写入密码。简单的

第二,我需要您的帮助,就是使用Windows用户名来定义允许在没有密码的情况下取消对其的保护(密码在已定义的代码中)

如何使用
Environ.user
定义哪个用户可以使用该宏

例如用户:第一个“hackla”和第二个“klaud”

我的基本代码看起来是这样的:

Sub TabelleEntsperren()
  Dim strPassw As String
  Dim wSheet As Worksheet

strPassw = "Athens"

 For Each wSheet In ActiveWorkbook.Worksheets
 wSheet.Unprotect Password:=strPassw
Next wSheet

End Sub

你是说像这样的事吗

Sub TabelleEntsperren()
    Const strPassw As String = "yourPassword"
    Const usr1 As String = "hackla"
    Const usr2 As String = "klaud"

    Dim wSheet As Worksheet
    Dim isTrustedUser As Boolean
    Dim currentUsr As String

    currentUsr = Environ("username")
    isTrustedUser = currentUsr = usr1 Or currentUsr = usr2

    For Each wSheet In ActiveWorkbook.Worksheets
        If isTrustedUser Then wSheet.Unprotect Password:=strPassw
    Next wSheet

End Sub

你是说像这样的事吗

Sub TabelleEntsperren()
    Const strPassw As String = "yourPassword"
    Const usr1 As String = "hackla"
    Const usr2 As String = "klaud"

    Dim wSheet As Worksheet
    Dim isTrustedUser As Boolean
    Dim currentUsr As String

    currentUsr = Environ("username")
    isTrustedUser = currentUsr = usr1 Or currentUsr = usr2

    For Each wSheet In ActiveWorkbook.Worksheets
        If isTrustedUser Then wSheet.Unprotect Password:=strPassw
    Next wSheet

End Sub
选项显式
'私有API声明
#如果是VBA7和Win64,则
私有声明PtrSafe函数GetComputerName Lib“kernel32”别名“GetComputerNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
私有声明PtrSafe函数GetUserName Lib“advapi32.dll”别名“GetUserNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
#否则
私有声明函数GetComputerName Lib“kernel32”别名“GetComputerNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
私有声明函数GetUserName Lib“advapi32.dll”别名“GetUserNameA”(ByVal lpBudffer作为字符串,nSize作为Long)作为Long
#如果结束
'以获取计算机名
公共函数getActiveComputerName()作为字符串
尺寸cn为字符串,ls为长,res为长
cn=字符串(1024,0)
ls=1024
res=GetComputerName(cn,ls)
如果是0那么
getActiveComputerName=Mid$(cn,1,InStr(cn,Chr$(0))-1)
其他的
getActiveComputerName=“”
如果结束
端函数
'以获取活动用户的标识符
公共函数getActiveUserName()作为字符串
尺寸cn为字符串,ls为长,res为长
cn=字符串(1024,0)
ls=1024
res=GetUserName(cn,ls)
如果是0那么
getActiveUserName=Mid$(cn,1,InStr(cn,Chr$(0))-1)
其他的
getActiveUserName=“”
如果结束
端函数
选项显式
'私有API声明
#如果是VBA7和Win64,则
私有声明PtrSafe函数GetComputerName Lib“kernel32”别名“GetComputerNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
私有声明PtrSafe函数GetUserName Lib“advapi32.dll”别名“GetUserNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
#否则
私有声明函数GetComputerName Lib“kernel32”别名“GetComputerNameA”(ByVal lpBuffer为字符串,nSize为Long)为Long
私有声明函数GetUserName Lib“advapi32.dll”别名“GetUserNameA”(ByVal lpBudffer作为字符串,nSize作为Long)作为Long
#如果结束
'以获取计算机名
公共函数getActiveComputerName()作为字符串
尺寸cn为字符串,ls为长,res为长
cn=字符串(1024,0)
ls=1024
res=GetComputerName(cn,ls)
如果是0那么
getActiveComputerName=Mid$(cn,1,InStr(cn,Chr$(0))-1)
其他的
getActiveComputerName=“”
如果结束
端函数
'以获取活动用户的标识符
公共函数getActiveUserName()作为字符串
尺寸cn为字符串,ls为长,res为长
cn=字符串(1024,0)
ls=1024
res=GetUserName(cn,ls)
如果是0那么
getActiveUserName=Mid$(cn,1,InStr(cn,Chr$(0))-1)
其他的
getActiveUserName=“”
如果结束
端函数

我认为应该是
环境(“用户名”)
。在CMD提示符中选中
SET
以确保。顺便问一下,你真的确定有人盗用别人的计算机而不知道自己的用户名吗?对我来说,似乎是TSA式的安全措施。它是简单的办公室文件保护。在那里工作的人不那么聪明:-)。正如你所说的。但是,如何将其放入该代码中,以使用该代码定义的用户名检查来自Windows的用户名?您正在用普通用户名替换密码,因此我选择不参与。我认为应该是
environ(“用户名”)
。在CMD提示符中选中
SET
以确保。顺便问一下,你真的确定有人盗用别人的计算机而不知道自己的用户名吗?对我来说,似乎是TSA式的安全措施。它是简单的办公室文件保护。在那里工作的人不那么聪明:-)。正如你所说的。但是,如何在代码中使用代码定义的用户名检查Windows中的用户名?您正在用普通用户名替换密码,因此我选择不参与。