[您不确定这是否可以通过vba以excel或任何方式进行。我想通过用户名自动过滤。我有一个可供不同用户使用的文件,该文件没有共享,因此一次只能一个人使用。 excel是否有可能识别用户名并将X列过滤为该用户名。显示与该用户相关的行。
ie Column X
John Doe
John Smith
Jane SMith
如果john Smith打开文件,它将自动过滤以仅显示john smiths行,如果用户名不在X列中,则显示全部?
这不是出于安全意识,因此,如果有人取消过滤,这不是问题,只是拥有一个不错的选择。
我知道excel可以调用用户名,因为我有一些发送文件的代码,并且保存在文件名中的用户名使用
Environ("Username"
任何帮助将不胜感激,因为我什至不知道从哪里开始
谢谢
假设您在Sheet1中具有以下虚拟数据:
我们要过滤名称,第3列。
实现此目的的示例代码为:
Sub NameFilter()
Dim name As String
name = Environ("Username") 'e.g. "Mary"
ThisWorkbook.Sheets("Sheet1").Range("A1:C6").AutoFilter 3, "=" & name
End Sub
您可以将其放在Workbook_Open
函数中,以在打开工作簿时触发:
我们可以使它更加健壮和灵活,同时考虑到您的要求,如果不存在该名称,则不进行过滤。有关详细信息,请参见下面我的评论:
Sub NameFilter()
' Get the username for filtering
Dim name As String
name = Environ("Username")
' Define the filter range
Dim Rng As Range
Set Rng = ThisWorkbook.Sheets("Sheet1").Range("A1:C6")
' Define the column for filtering
Dim FiltColumn As Long
FiltColumn = 3
' Clear filters by default
Rng.AutoFilter FiltColumn
' Check if the name exists
NameExists = Application.Match(name, Rng.Columns(FiltColumn))
' Filter if the name does exist
If Not IsError(NameExists) Then
Rng.AutoFilter FiltColumn, "=" & name
End If
End Sub