2017-05-11 6 views
0

私は1つのメインテーブルを持つMS Access DBを持っています。VBA、MS Access:テーブルにアクセスするためのWindows AD

20人以上のユーザー。それらの名前は、メインテーブルの列の1つにあります。 私もUser NameLastNameとWin AD IDを持つUserテーブルを作成しました 私はデータの更新と修正のために分割フォームを作成しました。いくつかのVBAモジュールが関係しています。 私はこれを行うために取り組んでいます: - ユーザがフォームを開くたびに、彼/彼女のWin AD ID名にのみ関連付けられたレコードが事前にフィルタリングされます - ユーザーは表示/照会できません他のユーザーのレコード

ユーザーがマシンにログインする際に使用するIDがありますが、上記の目的のためにVBAコードでIDを使用できますか?

これは私がコンボボックスにユーザー(プロジェクトマネージャ)をフィルタリングする方法今です:

'Check if there is a value for Project Manager and build filter string 
If Not IsNull(Me.cmbProjMang) And Me.cmbProjMang <> "" Then 
    If intFilterSet Then 
     strFilter = strFilter & " AND " 
    End If 

    strFilter = strFilter & "[PM] = " & Chr(34) & Me.cmbProjMang & Chr(34) 
    intFilterSet = 1 
End If 

は、その機能だろう - 私の問題 - 印刷ENVIRON(「ユーザー名」)に対する解決策の可能部を添加することここや別のサブですか?

ありがとうございます! MichMich

答えて

0

でユーザーIDを取得し、フォームにフィルタをかけます。

置き、この標準モジュールで:

Option Explicit 

'Username 
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long 
Public Function Username() As String 
    On Error GoTo ErrProc 

    Dim lnglen As Long, lngX As Long, strName As String 

    strName = String(254, 0) 
    lnglen = 255 
    lngX = apiGetUserName(strName, lnglen) 

    If lngX <> 0 Then Username = Left(strName, lnglen - 1) 

Leave: 
    On Error GoTo 0 
    Exit Function 

ErrProc: 
    MsgBox Err.Description, vbCritical 
    Resume Leave 
End Function 

フォームのフィルタ:

Private Sub Form_Load() 
    Dim user_ As String 
     user_ = YourModuleName.Username 

    With Me 
     .Filter = "[Win AD ID]='" & user_ & "'" 
     .FilterOn = True 
    End With 
End Sub 
関連する問題