2016-09-23 44 views
2

SQL Serverデータベースにロードされる一連のモデル入力を含むスプレッドシートがあります。このプロセスの一部には、誰がいつ何を更新したかを監査する証跡を作成することが含まれます。ユーザーとマシンの名前とタイムスタンプを記録します。私のVBAコード内Excel/VBA Environ( "username")エラー

、私は次のようしている:

ユーザー= VBA.environ $( "ユーザ名")

これには、Office 2013

で、Win7のマシン上で実行されています私はコードを実行する、それはすべて正常に動作しますが、生産の誰かが(同じマシンで、しかし私がログインしている)それを実行すると、上の行になります。私は上記のバリエーション(user = environ( "username")、user = environ $( "username"))を使用しましたが、常に同じ結果を得ました。

これを修正する方法について考えている人はいますか?

答えて

1

は、あなたは以下のとおりです。

Sub Test() 
    With CreateObject("WScript.Network") 
     Debug.Print .UserName 
     Debug.Print .ComputerName 
     Debug.Print .UserDomain 
    End With 
End Sub 
+0

お寄せいただきありがとうございます。私は月曜日にそれを試し、それがうまくいくかどうかを見ます。 – John

+0

も私のために働いた。これであなたの助けに感謝します。 – John

0

私はいつもそれはほとんど常により良いですので、Application.UserNameを使用 - Application.UserNameはあなたを与えるだろう、一方、environ$("username")はあなたに「ジョン・〜・スミス」のようなものを与えることができる「ジョン・スミス」を

+1

「アプリケーション。ユーザー名」はExcelの一般オプションで変更することができますので、私はそれをさらに信頼性の低いものと見なしますhttp://blog.contextures.com/archives/2010/09/10/allow-only-specific-user変更してください - リスト/ – Slai

4

を環境変数は

  1. 信頼性が低いですユーザーは必要な値に値を編集できます
  2. ユーザーは環境変数を削除できます。

これらのいずれかを試してください。APIメソッド。

オプション1

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ 
(ByVal lpBuffer As String, nSize As Long) As Long 

Sub Sample() 
    Dim lpBuff As String * 25 
    Dim ret As Long, UserName As String 

    ret = GetUserName(lpBuff, 25) 
    UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1) 

    MsgBox UserName 
End Sub 

オプションここでは2

Option Explicit 

Private Declare Function GetEnvironmentVariable Lib _ 
"kernel32" Alias "GetEnvironmentVariableA" _ 
(ByVal lpName As String, ByVal lpBuffer As String, _ 
ByVal nSize As Long) As Long 


Private Sub Sample() 
    Dim strUserName As String * 255 
    Dim x As Integer 

    x = GetEnvironmentVariable("USERNAME", strUserName, Len(strUserName)) 
    If x > 0 Then 
     x = InStr(strUserName, vbNullChar) 
     If x > 0 Then 
      MsgBox (Left$(strUserName, x - 1)) 
     Else 
      MsgBox (Left$(strUserName, x)) 
     End If 
    End If 
End Sub 
+0

ありがとうございます。私は月曜日にそれを試してみましょう、あなたはそれがどうなるかを教えてください... – John

+1

私はあなたのオプション2を使用し、それは完全にユーザー名とコンピュータ名をキャプチャするために働いた。 – John

0

私は常に使用

Environ("USERPROFILE") 

しかし、私はその人のデスクトップをかなり参考にする必要があります。

関連する問題