我获得了运行sql server存储过程的VBA代码,将数据导入excel。
EX:Excel数据:
Id Division Department Scale
1 North IT 8.5
2 South Finance 8.0
3 North Finance 8.0
4 West IT 8.5
5 East Finance 8.0
6 South IT 8.5
现在我的情况是:
如果North
中的一个用户运行VBA宏,则excel结果应仅显示Division
北。如果来自South
的用户运行VBA宏,则excel结果应仅显示Division
南。
EX:如果来自South
的一个用户运行VBA宏,则结果如
Id Division Department Scale
2 South Finance 8.0
6 South IT 8.5
如何按Division
设置用户以过滤VBA中的数据。
我的用户数量有限,大多数是4-6位用户。有没有办法使用他们的Windows凭据来过滤excel中的数据,通过在VBA中添加一些代码?
任何帮助?
答案 0 :(得分:3)
由于您拥有少量用户,因此您可以直接在VBA项目中对其进行硬编码。为此,我将使用Dictionary对象。字典是一种将数据存储在键值对中的方法。
让我们深入研究一些代码。
Sub Test()
Dim dict As Object
Dim key As Variant
Dim user As String
Dim region As String
Set dict = CreateObject("Scripting.Dictionary")
'Add your username / region
'pairs to the dictionary object
dict.Add "user1", "South"
dict.Add "user2", "North"
dict.Add "user3", "South"
dict.Add "user4", "West"
'.. etc
'Get the username of the currently logged-in person
user = Environ("username")
'Loop through dictionary to find the
'region which matches the username
For Each key In dict.Keys
If key = user Then
region = dict.Item(key)
End If
Next key
'If the username is not found, we should
'exit the subroutine. You could display
'a messagebox or something similar
If region = vbNullString Then
MsgBox "Invalid username!", vbCritical, "Invalid Username"
Exit Sub
End If
'From hereon out you would do as you
'normally do, passing in the variable
'region as one of your parameters
End Sub
如果您不希望用户查看其他用户分配到哪个区域,则应使用密码保护您的VBA代码。您可以转到工具 - >来执行此操作。 VBAProject属性... - >保护并勾选“锁定项目以供查看”框并输入密码。
我应该补充一点,使用这种字典方法有局限性。例如,如果需要将一个用户分配到多个区域,则这将不起作用,因为每个键,值对必须是唯一的。
如果是这种情况,我会考虑处理这个服务器端。您可以创建一个具有用户名,区域对的新sql表。然后,您可以将用户名作为参数传递给SQL存储过程,并使用该参数来控制过程返回的结果。这最终可能更令人满意。
答案 1 :(得分:1)
是的。 Environ(“用户名”)给出了windows登录,对于4-6个用户,你甚至可以硬编码北方和南方的映射,或者当然把它设置为excel中的范围,或者数据库表和查找方式。
答案 2 :(得分:1)
您的答案就在Answer。
我认为您需要这样的解决方案:
您需要一个至少包含UserName
和Direction
列的数据集
指定方向的任何用户。
现在您拥有了允许您查找特定用户的UserName = Environ("username")
。
从您的数据集中找到Direction
之后,您应该按照该线索过滤所有工作表,例如隐藏不在该方向的行。
如果您想要一个过滤器使他或她无法访问其他行的文件开启者,您还需要编写一些代码来保护该数据表。
< / LI>