基于用户名excel的过滤器

问题描述 投票:1回答:1

[您不确定这是否可以通过vba以excel或任何方式进行。我想通过用户名自动过滤。我有一个可供不同用户使用的文件,该文件没有共享,因此一次只能一个人使用。 excel是否有可能识别用户名并将X列过滤为该用户名。显示与该用户相关的行。

ie Column X
John Doe
John Smith
Jane SMith

如果john Smith打开文件,它将自动过滤以仅显示john smiths行,如果用户名不在X列中,则显示全部?

这不是出于安全意识,因此,如果有人取消过滤,这不是问题,只是拥有一个不错的选择。

我知道excel可以调用用户名,因为我有一些发送文件的代码,并且保存在文件名中的用户名使用

Environ("Username"

任何帮助将不胜感激,因为我什至不知道从哪里开始

谢谢

excel vba filter username autofilter
1个回答
2
投票

假设您在Sheet1中具有以下虚拟数据:

data

我们要过滤名称,第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函数中,以在打开工作簿时触发:

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
© www.soinside.com 2019 - 2024. All rights reserved.