使用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 

任何人都可以在导致差异的代码中看到错误吗?

This is the sheet its looks up (Sheet2)

+0

首先,您不必使用GoTo语句,您可以退出使用Exit Do进行循环。当您说它对某些用户不起作用时,会发生什么? –

+0

用户看到以下消息:“您无权完成日期的结束,只有指定的人才能完成”。当它不起作用。 – tbolge74

+0

其他用户会发生什么,如果您看到其他用户的msgbox,则表示两个值都不匹配。您可以尝试在没有单引号的msgbox语句'&UserName'中添加一行并查看它显示的内容。 –

尝试二者的用户名和比较字符串转换为大写。

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