使用VB代码登录用户名并不是所有名称
问题描述:
我有一个Excel宏,它在工作表(名为“Sheet2”)上查找范围,如果它与使用VB代码登录的用户名相匹配,它将运行下半场。对于一些用户而言,这是有效的,对于其他用户则不适用使用VB代码登录用户名并不是所有名称
我不明白是什么原因是有些用户无法运行它?
我有这样的在开始我的功能,因为有些用户是Windows 7的,有些是窗口10(这是不是对谁可以运行与否的分歧)
#If Win64 Then
Declare PtrSafe Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
#Else
Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _
(ByVal lpBuffer As String, nSize As Long) As Long
#End If
实际的代码,当用户运行:
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)
Myrow = 0
blankrow = 0
Do Until Sheets("Sheet2").Range("A2").Offset(Myrow, 0) = ""
If Sheets("Sheet2").Range("A2").Offset(Myrow, 0) = UserName Then GoTo 1
Myrow = Myrow + 1
Loop
MsgBox "You are not authorised to finalise the end of day, only specified people can complete", vbCritical, "BBH Oversight"
Exit Sub
1
任何人都可以在导致差异的代码中看到错误吗?
答
尝试二者的用户名和比较字符串转换为大写。
Dim ret As Long, UserName As String
ret = GetUserName(lpBuff, 25)
UserName = UCase(Left(lpBuff, InStr(lpBuff, Chr(0)) - 1))
Myrow = 0
blankrow = 0
Do Until Sheets("Sheet2").Range("A2").Offset(Myrow, 0) = ""
If UCase(Sheets("Sheet2").Range("A2").Offset(Myrow, 0)) = UserName Then GoTo 1
Myrow = Myrow + 1
Loop
MsgBox "You are not authorised to finalise the end of day, only specified people can complete", vbCritical, "BBH Oversight"
Exit Sub
1
首先,您不必使用GoTo语句,您可以退出使用Exit Do进行循环。当您说它对某些用户不起作用时,会发生什么? –
用户看到以下消息:“您无权完成日期的结束,只有指定的人才能完成”。当它不起作用。 – tbolge74
其他用户会发生什么,如果您看到其他用户的msgbox,则表示两个值都不匹配。您可以尝试在没有单引号的msgbox语句'&UserName'中添加一行并查看它显示的内容。 –