2017-05-11 88 views
0

我有一個MS Access DB,其中包含一個主表。VBA,MS Access:Windows AD訪問表

20+用戶。他們的名字在主表中的一列中。 我也創建了用戶表(使用用戶名和姓名) 我已經創建了數據更新和修改的拆分表單。有一些VBA模塊涉及。 我正在努力做到這一點: - 每次用戶打開表單時 - 它都將預先過濾的記錄僅與他/她的勝利AD ID名稱關聯 - 用戶將無法查看/查詢任何其他用戶的記錄

我們有人用來登錄到他們機器的ID,我可以在VBA代碼中使用它來實現上述目標嗎?

現在這是我如何篩選在組合框中用戶(項目經理):

'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

獲取用戶標識並過濾表格。

將這個標準模塊中:

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