使用if / then和.value时的#value

时间:2017-11-23 05:45:14

标签: vba excel-vba excel

我正在编写一个vba函数来检查一个单元格的名称,如果匹配,则返回另一个单元格中的值。由于我还是vba的新手,我仍然在硬编码大多数变量以简化操作。不知何故,我功能中最简单的一步就是让我失望。

我尝试了两种将值写入单元格的方法,但都不起作用。两者都返回单元格A2中的#VALUE。

Function getRole(lastName As String, firstName as String) As String

if (lastName = Worksheets("Sheet1").Range("A1").Value Then
    Worksheets("Sheet1").Range("A2").Value = "YES"
    'Alternate method
    'Worksheets("Sheet1").Range("A2").Select
    'ActiveCell.Text = "YES"
Else: 
    Worksheets("Sheet1").Range("A2").Value = "NO"
    'Alternate method
    'Worksheets("Sheet1").Range("A2").Select
    'ActiveCell.Text = "NO"
End If

End Function

3 个答案:

答案 0 :(得分:0)

如果您要编写 UDF ,则需要将代码修改为类似下面的代码:

Function getRole(lastName As String, firstName As String) As String

If lastName = Worksheets("Sheet1").Range("A1").Value Then
    getRole = "YES"
Else
    getRole = "NO"
End If

End Function

从工作表的单元格中调用 UDF 的方式:

enter image description here

答案 1 :(得分:0)

您的代码已针对语法进行了更正: -

Function getRole(lastName As String, firstName as String) As String
    if lastName = Worksheets("Sheet1").Range("A1").Value Then
        Worksheets("Sheet1").Range("A2").Value = "YES"
    ElseIf Worksheets("Sheet1").Range("A2").Value = "NO" Then
        getRole = Worksheets("Sheet1").Range("A1").Value 
End If End Function

答案 2 :(得分:0)

这对你有用......

Function getRole(lastName As String, firstName As String) As String

If lastName = Sheet1.Range("A1").Value Then
    Sheet1.Range("A2") = "YES"
    'Alternate method
    'Worksheets("Sheet1").Range("A2").Select
    'ActiveCell.Text = "YES"
Else
    Sheet1.Range("A2") = "NO"
    'Alternate method
    'Worksheets("Sheet1").Range("A2").Select
    'ActiveCell.Text = "NO"
End If

End Function