Проблемы Excel / VBA с ошибкой имени пользователя приложения - PullRequest
0 голосов
/ 06 февраля 2019

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

Ошибка времени выполнения 1004, Ошибка приложения или объекта.

 Sub test()
Dim email As Variant
Dim name As String
name = Application.UserName
email = WorksheetFunction.VLookup(name, Sheet1.Range("K:N"), 4, False)
MsgBox email
End Sub

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

name = "Mike Thomson"

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Вы можете попробовать:

Option Explicit

 Sub test()

    Dim email As String
    Dim strname As String

    strname = Application.UserName
    email = WorksheetFunction.VLookup(strname, Sheet1.Range("K:N"), 4, False)
    If email = "" Then
        MsgBox "No email found for " & strname & "."
    Else
        MsgBox "The email address assign to " & strname & " is " & email & "."
    End If

End Sub
0 голосов
/ 07 февраля 2019

Извинения, обнаружил проблему, таблица поиска не имела такое же написание, как application.username.Следовательно, он выдаст эту ошибку.

Спасибо, ребята, за вашу помощь.

0 голосов
/ 06 февраля 2019

Попробуйте этот код в новой книге Excel:

Sub TestMe()

    WriteData        
    Dim email As String
    Dim name As String: name = "Mike"  'Application.UserName
    email = WorksheetFunction.VLookup(name, Worksheets(1).Range("K:N"), 4, False)
    MsgBox email

End Sub

Sub WriteData()

    With Worksheets(1)
        .Range("K1") = "Mike"
        .Range("K2") = "Mike2"
        .Range("N1") = "Mike@add.ress"
        .Range("N2") = "Mike2@add.ress"
    End With

End Sub

Обычно он ищет значение «Mike» в столбце «K» и возвращает значение в столбце «N» соответствующей строки.


Если есть возможная ошибка, поэтому VlookUp() не находит правильное значение, тогда возможны следующие две опции:

  • Dim email As VariantОн вернет номер ошибки в MsgBox(), если ошибка существует.Причина в том, что Variant может принимать значение ошибки само по себе, а строка не может.

  • Использовать IfError и перехватывать ошибку соответственно.В приведенном ниже примере возвращается «Нет», а затем переменная name:


Sub TestMe()

    WriteData

    Dim email As String
    Dim name As String: name = "Mike"  'Application.UserName
    With Application
        email = .WorksheetFunction.IfError(.VLookup(name, _
            Worksheets(1).Range("K:N"), 4, False), "No " & name)
    End With
    MsgBox email

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...