2017-10-10 10 views
0

シート上の範囲(「Sheet2」)に表示されるExcelマクロがあり、これがVBコードでログオンしたユーザー名と一致する場合、後半。一部のユーザーにとって、これは機能し、他のユーザーにとっては機能しません。すべての名前を取得していないVBコードのユーザー名にログオンしました

一部のユーザーが実行できない理由がわかりません。

一部のユーザーがWindows 7であり、一部では、Windows 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

まず、あなたはあなたはそれが正確に何が起こるか一部のユーザーのために動作しませんと言う出口Do.Whenでループを行う終了することができますGoToステートメントを使用する必要はありませんか? –

+0

ユーザーには、「指定した人だけが完了できるように、終了日を確定する権限がありません」というメッセージが表示されます。それは動作しません。 – tbolge74

+0

他のユーザーには何が起こるのですか?他のユーザーのmsgboxが表示されている場合、両方の値が一致していないことを意味します。msgbox文 '&UserName'に1行追加してください。 –

答えて

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 
関連する問題