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