Excel vba имя пользователя windows

Процедура Visual Basic для получения текущего имени пользователя

Аннотация

Вы можете сделать вызов Windows API (интерфейс прикладного программирования) в библиотеку DLL Microsoft Windows (библиотеку динамической компоновки), чтобы получить имя текущего пользователя. Имя текущего пользователя можно получить с помощью функции ADVAPI32. Файлы.

Дополнительная информация

Microsoft Excel не имеет встроенных функциональных возможностей для доступа к текущему имени пользователя компьютера. Однако вы можете использовать оператор Declare в макросе Visual Basic для приложений для вызова функции Microsoft Windows, которая будет возвращать текущее имя пользователя. Корпорация Майкрософт предоставляет примеры процедур для работы с приложениями в Visual Basic для приложений, предназначенные только для иллюстрации, без каких-либо гарантий или подразумеваемых, включая, но не ограничиваясь подразумеваемыми гарантии пригодности и/или применимости для определенной цели. Процедуры Visual Basic, описанные в этой статье, предоставляются «как есть», и Microsoft не гарантирует, что они могут использоваться во всех ситуациях. Специалисты службы поддержки Майкрософт могут объяснить особенности функций определенного макроса, но они не изменяют эти примеры для предоставления дополнительных функциональных возможностей, а также не помогают вам создавать макросы в соответствии с конкретными потребностями. Если вы ограничили взаимодействие с программированием, вам может потребоваться обратиться к одному из поставщиков решений Майкрософт. Поставщики решений предлагают широкий спектр услуг, основанных на сборах, в том числе создание настраиваемых макросов. Чтобы получить дополнительные сведения о поставщиках решений Майкрософт, обратитесь в службу Microsoft по информации о клиентах (800) 426-9400.

ОБРАЗОМ

Введите следующий код в новый модуль:

Запустите макрос Get_User_Name. Обратите внимание, что имя текущего пользователя появится в окне сообщения.

Имя учетной записи компьютера в VBA

Оооооочень много вариантов получения имени пользователя, однако почти ничего не нашел, как найти имя учетной записи компьютера. Дорогие профессионалы, отзовитесь и помогите в решении данного вопроса.

Автовыбор учетной записи в VBA
Всем привет! Подскажите каким образом можно при отправле почты сменить учетную запись. Дело в.

Как послать имя компьютера и имя учетной записи с ip письмом
Добрый день. Шеф поставил задачу, собрать данные из компьютеров внутри нашей локальной сети, а.

Выделять из имени каждого файла имя компьютера и имя учётной записи и записывать их в два файла соответственно
здравствуйте, подскажите. Есть например, 10 файлов (.txt) в названии которых написано имя.

Изменить имя учетной записи
Добрый день. Надо изменить имя учетной записи на англ. Но запись единственная администратора. .

Этот код показывает имя компьютера. А нужна текущая учетная запись компьютера.

Добавлено через 2 минуты
Есть один код, который показывает учетные записи. Но показывает все, включая текущую. Как вырвать только текущую не знаю.

Тоже показывает имя пользователя (UserName), а не учетную запись компьютера (UserAccount).

Смотрите пост #5

Посмотрел пост #5. Что я там должен увидеть? Перебор всех учетных записей пользователей, а никак не учетную запись ПК.

Для просмотра и управления учетными записями компьютеров необходимо все это делать на ПК под управлением Windows Server, насколько я знаю. У Вас Windows Server на ПК? Или же обычная версия? И к тому же для изменения данных параметров необходимо обладать правами первой группы: «Операторы учета», «Администраторы домена» или «Администраторы предприятия» в доменных службах Active Directory.
Может поясните зачем Вам все это вообще необходимо?

Получение полного имени пользователя Windows макросом VBA

Чтобы получить полное имя пользователя в Windows, можно использовать функцию UserFullName:

Данная функция использует интерфейс WMI для получения необходимых данных.

Посмотреть список всех учётных записей пользователей на компьютере можно следующим кодом:

Читайте также:  Как удалить язык системы windows 10

Результат работы этого кода:

FullName: ASP.NET Machine Account
FullName: Учетная запись помощника для удаленного рабочего стола
FullName: CN=Microsoft Corporation,L=Redmond,S=Washington, C=US
FullName:
FullName: VBA Developer

Если же вам нужно получить только логин (имя пользователя) Windows, то код будет заметно проще:
(все 3 способа равнозначны — возвращают один и тот же результат)

PS: При создании этого макроса была использована программа WMI Code Creator:

Комментарии

А разве Application.UserName ровно это и не возвращает?

Добрый день!
В этот код можно добавить адрес или IP?
Sub WMI_username()

Workbooks.Open «C:\Users\» & iName & «\Desktop\Áóôåðíûé ñêëàä.xlsx»

Dim iName As String
iName = Environ(«UserName»)

Workbooks.Open «C:\Users\iName\Desktop\Áóôåðíûé ñêëàä.xlsx»

Такая проблема, не могу получить адрес.
Выдает код ошибки 1004

При желании можно утяжелить код с помощью «Application.PathSeparator», дабы не зависеть от версий операционной системы.

Код, конечно, тестировался, — только на WindowsXP (да и в статье приведен результат работы кода)
Сейчас проверил — в WinXP код работает и с прямыми, и с обратными слешами.
Не знал, что в Win7 что-то поменяли в этом плане.

Исправил все слеши в коде.

Насчёт объявления переменных: видимо, у вас в настройках редактора VBA включена опция «Требовать объявление переменных»,
и, соответственно, первой строкой в модуле присутствует директива Option Explicit
Я же этот режим не использую — потому часто и не объявляю переменные в своих макросах.

Как узнать логин и стаус пользователя с помощью VBA?

5 ответов

Если Вы говорите о свойстве UserName объекта Application, то при работе с Windows линейки NT здесь могут быть «подводние камни».
Дело в том, что это свойство возвращает имя не того пользователя, который открыл текущий сеанс работы в Windows, а того, под чьим именем был создан профиль, назначенный для использования текущему пользователю. Резюме: это [color=red]ненадёжный[/color] способ верификации.

Пожалуй, второе проще первого. Здесь надо знать какая у Вас сеть: одноранговая или доменная.

Что касается логина, то я пробовал два способа: с помощью функций UserName и Environ. Результат они давали одинаковый и вроде правильный. Не подскажете, какой из них работает более надежно (не приятно будет, если ошибка всплывет через пару месяцев), или есть еще какие-то способы, работающие наверняка?

А вот сеть в организации доменная.

[color=blue]Environ[/color] возвращает верные данные. Однако с её помощью Вы не сможете установить членства пользователя в группах.

В таком случае удобнее всего будет воспользоваться интерфейсами ADSI.
Вот пара примеров.
1. Определение имени текущего пользователя и проверка его членства в заданной доменной группе:

Авторизация в Excel на VBA

Авторизация в Excel на VBA: создание формы, написание программного кода, особенности реализации.

В этой статье я расскажу вам о создании формы авторизации в Excel с помощью VBA.

Что же представляет из себя авторизация в Excel? Это форма, то есть окно, с запросом ввода логина и пароля, при успешном вводе которых, пользователю будут открываться различные листы документа, в зависимости от группы доступа пользователя. Точно также, помимо открытия листов, можно будет выставить ограничения на действия в Excel: запрет форматирования ячеек, удаление строк, столбцов, использование фильтров, объектов, сценариев и так далее. Но обо всем по порядку.

Авторизация в Excel: основной алгоритм работы

Для начала, необходимо разработать алгоритм, по которому мы будем работать, и выглядеть он будет примерно так:

Итак, поехали!

Авторизация в Excel: макет документа

Наш рабочий документ будет состоять из четырех листов:

  1. Лист с приветствием — единственный лист, который будет отображаться всем пользователям до авторизации
  2. Лист с дашбордом (визуализированным отчетом) — графики, диаграммы/гистограммы — изначально со свойством VeryHidden*
  3. Лист с данными — источник расчетов для дашборда — изначально со свойством VeryHidden
  4. Служебный/технический лист — для хранения логинов, паролей и служебной и вспомогательной информации — также, со свойством VeryHidden
Читайте также:  Остановить ненужные процессы windows 10

*VeryHidden— свойство листа, при котором сам лист скрыт и включить его отображение можно только через использование режима разработчика. Для выбора данного свойства, необходимо в Excel зайти в меню «Разработчик» — «Visual Basic». Далее, необходимо выбрать нужный нам лист и в его свойствах («Properties») найти свойство Visible и установить в «2 — xlSheetVeryHidden».

После этого лист станет «очень скрытым». Отменить свойство VeryHidden можно точно так же через режим разработчика, либо используя необходимый нам макрос, о котором я напишу чуть дальше.

Авторизация в Excel: группы доступа

После создания макета документа, нам необходимо разработать несколько групп доступа и распределить и ограничить для них права. Предположим, что таких групп будет три:

  1. Администраторы (Admin): доступны все листы , в том числе служебный, а также отсутствуют какие-либо ограничения.
  2. Руководители и ответственные за данные (Head): доступны 2 рабочих листа + стоит пароль на изменение структуры книги.
  3. Рядовые сотрудники компании (Worker): доступен только 1 рабочий лист с дашбордом + стоит пароль на изменение структуры книги.
Авторизация в Excel: разработка макета формы

С этим пунктом не должно возникнуть никаких проблем. Элементов на форме авторизации должно быть не так уж и много:

  • Поле ввода для логина
  • Поле ввода для пароля
  • Кнопка «Авторизация» (проверка логина и пароля)
  • Различные подписи на форме
  • По желанию: кнопка закрытия формы, кнопка восстановления пароля, логотипы, справка и все, что душе угодно

Для тех, кто не знает, как создавать формы в VBA: нужно зайти в меню «Разработчик» — «Visual Basic», нажать правой кнопкой по нашему проекту (VBAProject Название_Файла.xlsx), затем Insert — UserForm. Создается форма с названием UserForm1, на которой мы и будем размещать все наши объекты с помощью меню «ToolBox».

Если быстро набросать элементы, которые мы перечислили, должно получиться что-то вроде этого:

После добавления элементов, поменял их стандартные названия:

«UserForm1» переименовал в «Authorization».
«TextBox1» переименовал в «TextBox_Login».
«TextBox2» переименовал в «TextBox_Pass».

Также, в свойствах «TextBox_Pass», мы находим свойство «PasswordChar» и вводим любой символ, который мы хотим видеть вместо вводимых символов пароля — чаще всего используется символ «*».

Ничего лишнего, пока что все просто. Переходим далее.

Подготовка служебного листа

В моем примере, служебный лист будет содержать список логинов, паролей, а также соответствующую логину группу доступа. Чтобы немного «усложнить» потенциальный взлом (хотя надо понимать, что взломать Excel продвинутому пользователю не составит никакого труда), пароли на листе мы будем хранить в захешированном виде. Подробнее о хешировании можно прочитать на Википедии, но в вкратце — это преобразование данных в строку фиксированной длины, состоящей из цифр и букв с помощью определенных математических алгоритмов. О том, как мы будем хешировать пароли в Excel, я расскажу далее.

Итак, для начала, содержимое служебного листа будет выглядеть вот так:

Авторизация в Excel: особенности и написание программного кода на VBA

Данные пункты тесно взаимосвязаны между собой, поэтому я их объединил в один большой. Здесь мы будем писать программный код для всего нашего файла: как для формы, так и для некоторых событий.

Для начала, мы напишем код, который будет отображать различные листы в зависимости от роли пользователя после авторизации. Макрос user_group мы делаем приватным и вписывать его будем не в отдельный модуль, а в нашу готовую форму Authorization. Аргументом для макроса является переменная X, которая будет содержать название группы доступа в виде текстовой строки String:

Хочу обратить внимание на то, что у нашего файла будет стоять «защита структуры книги» с паролем «112», т.е. пользователь не сможет создавать, удалять и переименовывать листы нашего документа. И, чтобы изменить видимость листов, необходимо сначала снять эту защиту программно, а затем, в зависимости от роли пользователя, поставить обратно, что мы и делаем в нашем коде.

Читайте также:  Bird has flown into windows

Далее, код для кнопки «Авторизация». При нажатии на данную кнопку, запускается несколько проверок:

  • Проверка полей логина и пароля заполнение: если одно из них не заполнено — выводится уведомление, выполнение макроса прекращается.
  • Проверка переменной Check: данная переменная хранит значение «некорректных» попыток входа. Ее необходимо объявить в основном модуле книги: Public check As Integer. Если данная переменная больше 3х — доступ к авторизации в текущей сессии блокируется.
  • Поиск и проверка логина на наличие на листе «Settings». Если логин найден — введенный пароль хешируется и сравнивается с хранимым хешем на соответствующей строке логина:
    • Если все корректно — запускается макрос User_Group, который открывает доступ к листам в зависимости от группы доступа, соответствующей логину.
    • Если данные некорректные — пользователь предупреждается об этом, а также наращивается счетчик некорректных попыток авторизации.
  • В оставшемся случае (все введено, но пользователь с таким логином не найден), пользователь также уведомляется.

В макросе CommandButton1_Click используется функция GetHash (строка 15), которая преобразует входящие данные в хеш. Данная функция взята с сайта ExcelVba.ru, за что выражаю им огромную благодарность. Код необходимо вставить в главный модуль книги:

Основной код написан, теперь переходим к более мелким.

Макрос, который запускает форму авторизации (можно установить на кнопку на главном листе «Main»):

Также, макрос можно использовать при событии «Open» — при открытии книги:

Стоит отметить, что у большинства пользователей запуск макросов по умолчанию отключен, именно поэтому на главном листе Main необходимо сделать что-то вроде «памятки» со справочной информацией о том, как активировать работу макросов.

Макрос для закрытия книги.

При закрытии книги, нам нужно снять защиту со структуры книги, затем скрыть все листы (кроме листа «Main»), а затем снова вернуть защиту структуры книги с паролем «112» (можно установить на какую-либо кнопку):

Да, данный макрос можно использовать при событии «BeforeClose» — перед закрытием книги. Однако, может возникнуть несколько проблем:

  • Если пользователь сохраняется вручную до закрытия документа, закрывает документ, а затем при автоматическом запросе о сохранении нажимает «не сохранять». В таком случае, при новом запуске документа, скрытые листы будут видны всем. Да, вероятность такого события крайне мала, но она все-таки есть.
  • Если добавим принудительное сохранение после скрытия всех листов, перед окончательным закрытием файла (как на примере ниже). В таком случае, если пользователь очень сильно ошибется с данными в файле и нажмет на крестик, чтобы начать все с нуля — файл все равно сохранится и восстановить исходные данные не получится.

Поэтому, чтобы избежать такой ситуации, я хочу предложить более радикальный, менее удобный вариант, который, однако, сведет вышеперечисленные потенциальные проблемы к минимуму: помимо выполнения макроса close_book перед каждым закрытием книги с помощью события «BeforeClose» (как на первом проблемном варианте), мы будем выполнять его и перед каждым ручным сохранением файла с помощью события BeforeSave:

Осталось только сделать памятку по включению макросов на главном листе документа, а также выполнить важный шаг, без которого все наши проделанные действия не имеют смысла — поставить пароль на проект VBA: Меню «Разработчик» — «Visual Basic» — «Tools» — «VBAProject — Project Properties» — Вкладка «Protection» — поставить галочку «Lock project for viewing» и ввести пароль и нажать «Ок».

Сохраняем файл в формате «.xlsb» или «.xlsm» и все, наша «Авторизация на VBA» готова. Помимо этого, можно защитить проект еще сильнее — о способах защиты написано моей отдельной статье.

Также, по желанию, мы можем сделать отдельную форму для администраторов, для добавления новых пользователей на лист «Settings», либо форму для восстановления пароля по какому-либо ключевому слову, но в данном примере такие функции мы реализовывать не будем.

Оцените статью