2017-10-10 71 views
0

我有一個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'中添加一行並查看它顯示的內容。 –

回答

0

嘗試二者的用戶名和比較字符串轉換爲大寫。

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 
相關問題