Фильтр по имени пользователя excel - PullRequest
1 голос
/ 20 марта 2020

Привет не уверен, будет ли это выполнимо через VBA в Excel или любым другим способом. Я хотел бы сделать автофильтр по имени пользователя. У меня есть файл, который будут использовать разные пользователи, он не доступен для совместного использования, поэтому только один человек может использовать его одновременно. Будет ли для Excel возможность распознать имя пользователя и отфильтровать столбец X с этим именем пользователя. чтобы отобразить строки, относящиеся к этому пользователю.

ie Column X
John Doe
John Smith
Jane SMith

Если файл Джона Смита откроется, он автоматически отфильтрует все строки Джона Смита, если имя пользователя отсутствует в столбце X, показать все?

Это не заботится о безопасности, поэтому, если кто-то не отфильтровывает, это не проблема, просто приятно иметь.

Я знаю, что Excel может вызывать имена пользователей, так как у меня есть некоторый код, который отправляет файл и сохраняется в имени файла, включая имя пользователя, используя

Environ("Username"

, любая помощь будет очень признательна, так как я даже не знаю, с чего начать

спасибо

1 Ответ

2 голосов
/ 20 марта 2020

Допустим, у вас были следующие фиктивные данные в Листе 1:

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
...