【问题标题】:assigning a vlookup value to a variable将 vlookup 值分配给变量
【发布时间】:2016-10-10 16:00:36
【问题描述】:

我没有将 vlookup 公式的结果添加到单元格,而是尝试仅将结果分配给变量但不起作用。

值为“September”,结果必须为 9,但我的 vba 代码在 Msgbox 中返回 0

 Sub Test()
Dim TableName2 As Integer

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"

MsgBox (TableName2)

End Sub

我尝试将变量更改为字符串,Msgbox 显示“FALSE”

你能帮助我,让我知道我做错了什么吗? :(

【问题讨论】:

  • 任何答案对您有用吗?该网站因反馈而蓬勃发展。如果任何工作,请通过单击答案的复选标记标记为正确。如果它们不起作用,请告诉我们出了什么问题,以便我们改进答案。

标签: excel vba


【解决方案1】:

这都是错误的——让我解释一下:

TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"

这是一个布尔表达式,它表示:

TableName2 = (FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)")

FormulaR1C1 不是变量名,因此它将计算为空字符串或空数值,当与 VLOOKUP 公式字符串比较时,将在此赋值语句的右侧返回 False 值,即:

TableName2 = False

False 被强制转换为整数值时(TableName2 被显式声明为整数,因此会发生隐式类型转换),结果是0 在您的MsgBox 语句中。

请尝试:

TableName2 = Application.Evaluate( _
             Application.ConvertFormula( _
             "=VLOOKUP(R1‌​9C9,Database!R1C8:R1‌​2C9,2,FALSE)", xlR1C1, xlA1))

如果搜索的值在数据库范围内不存在,这仍可能引发错误。

【讨论】:

    【解决方案2】:

    你可以用这个:

    Sub Test()
    Dim TableName2 As Integer
    
    On Error Resume Next
    TableName2 = Application.WorksheetFunction.VLookup(ActiveSheet.Range("I19"), Worksheets("Database").Range("H1:I12"), 2, False)
    On Error GoTo 0
    If TableName2 = 0 Then
        MsgBox "The month is mistyped as a match was not found"
    Else
        MsgBox (TableName2)
    End If
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多