mail mail
Нужен макрос для Excel?
Сделайте заказ прямо сейчас!
Ищете готовое решение?
Выбирайте и покупайте!
У вас есть интернет-магазин?
Настроим парсер под любой сайт!

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

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

Sub ПримерИспользованияUserFullName()
    ПолноеИмяПользователяWindows = WMI_UserFullName
    MsgBox ПолноеИмяПользователяWindows
End Sub

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

Function WMI_UserFullName() As String
    login$ = CreateObject("WScript.Network").UserName    ' читаем логин текущего пользователя

    Set objWMIService = GetObject("winmgmts://./root/CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", , 48)
    For Each objItem In colItems    ' перебираем все учётные записи
        If objItem.Name = login$ Then WMI_UserFullName = objItem.FullName
    Next
End Function

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

Sub WMI_username()
    Set objWMIService = GetObject("winmgmts://./root/CIMV2")
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_UserAccount", , 48)
    For Each objItem In colItems
        Debug.Print "FullName: " & objItem.FullName
    Next
End Sub

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

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

 

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

Sub ПолучениеИмениПользователяWindows()
 
    ' первый способ (читаем из переменной окружения)
    username1 = Environ("USERNAME")
    Debug.Print "username 1: " & username1
 
    ' второй способ (используем объект WScript.Network)
    username2 = CreateObject("WScript.Network").UserName
    Debug.Print "username 2: " & username2
 
    ' третий способ (читаем значение из реестра Windows)
    key$ = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOwner"
    username3 = CreateObject("WScript.Shell").RegRead(key$)    ' читаем из реестра
    Debug.Print "username 3: " & username3
 
End Sub

 

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

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

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

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

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

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

Интересно - код в VBA тестировался? Например в фрагменте "winmgmts:\\.\root\CIMV2" отработка происходит и в случае, если наклон слэшей изменить - "winmgmts://./root/cimv2", а так же требуется объявление переменных... Конфа ПК, на котором тестировался код: Win 7 Pro x64, MS Office 2010.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
                       _   _   _____   _____ 
___ ___ __ __ | | | | | ___| | ____|
/ __| / __| \ \ / / | |_| | | |_ | _|
\__ \ | (__ \ V / | _ | | _| | |___
|___/ \___| \_/ |_| |_| |_| |_____|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.