2015-10-06 52 views
0

我有一个workbook与rawdata。通过button用户可以打开UserInterface并导出不同的数据子集。仅给某些用户提供工作簿写入权限

现在我正在寻找一种只允许certain users(取决于windows用户名)对rawdata进行更改的方式,但所有用户仍然可以单击按钮导出数据。

这是据我还没有:

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long 
Sub AAA() 
Dim UName As String * 255 
Dim L As Long: L = 255 
Dim Res As Long 
    Res = GetUserName(UName, L) 
... 
End Sub 

的代码给我的是谁登录到操作系统的人的Windows用户名。 我想我需要做这样的事情(让我们假设HAL是谁有权访问RAWDATA用户):

If UName = "HAL" then 
---Unlock worksheet 
End If 

但我就是无法找到如何设置工作簿解锁并在(当)到设置工作表被锁定。我猜在公开赛中锁定它是一个坏主意。如果有人能帮助我,我真的很感激。

+0

我想你应该锁定在保存工作簿(BeforeSave事件中),并在SheetActivate事件或许解开了吗? –

+1

不需要你在那里的'function'。要获取登录用户的名称,只需要询问:'Debug.Print Environ(“USERNAME”)'。如果你也关心那个是'Environ(“USERDOMAIN”)'的域。您登录的服务器是具有DNS Environ(“USERDNSDOMAIN”)的Environ(“LOGONSERVER”)。 – Ralph

回答

1

这样的事情?

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Dim sh As Worksheet 
    For Each sh In Worksheets 
     sh.Protect "password" 
    Next sh 
    'or if only some Whorksheets need to be locked: 
    'ThisWorkbook.Worksheets("RawDatas").Protect "password" 
End Sub 

Private Sub Workbook_SheetActivate(ByVal sh As Object) 
    If UserIsAllowed() Then 
     sh.Unprotect "password" 
    End If 
End Sub 

Public Function UserIsAllowed() As Boolean 
    UserIsAllowed = True 
End Function 

(你需要改变航向的UserIsAllowed功能)

相关问题