【问题标题】:Excel VBA Named Range in VLOOKUP #VALUE errorVLOOKUP #VALUE 错误中的 Excel VBA 命名范围
【发布时间】:2017-11-21 02:11:34
【问题描述】:

此代码在单元格 A8 或 A17(取决于哪个切换处于活动状态)中引发 #VALUE 错误,而不是来自“dataWeaponField”命名范围的字符串值。 (例如)单元格 A17 中的这个 Excel 公式可以正常工作:=VLOOKUP(B17,dataWeaponField,2,FALSE)。我试图在 VBA 中简单地复制这个公式。

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
    If Target.Column = 1 And Target.Row = 7 Then 'CLICK TO SWAP WEAPONS
        If Range("A8").Interior.ColorIndex = 6 Then 'Primary Weapon
            Range("A8:C15").Interior.ColorIndex = 12 'Primary Weapon
            Range("A17:C24").Interior.ColorIndex = 6 'Secondary Weapon
            Range("A8").Value = "" 'Primary Weapon
            Range("A17").Value = Application.VLookup(Range("B17"), ThisWorkbook.Names("dataWeaponField"), 2, False)
        Else
            Range("A8:C15").Interior.ColorIndex = 6 'Primary Weapon
            Range("A17:C24").Interior.ColorIndex = 12 'Secondary Weapon
            Range("A8").Value = Application.VLookup(Range("B8"), ThisWorkbook.Names("dataWeaponField"), 2, False)
            Range("A17").Value = "" 'Secondary Weapon
        End If
        Range("A6").Select 'Cell above CLICK TO SWAP WEAPONS
    End If
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    因为您传递的是Name 对象而不是Range。您可以设置公式:

    Range("A17").Formula = "=VLOOKUP(B17, dataWeaponField, 2, FALSE)"
    

    或Evaluate它:

    Range("A17").Value = [VLOOKUP(B17, dataWeaponField, 2, FALSE)]
    

    此外,由于SelectionChange 在单击选定单元格时不会触发,因此您可以使用控件或超链接以及Worksheet.FollowHyperlink Event

    【讨论】:

    • @chazcon 它与您在“此 Excel 公式(例如)单元格 A17 中的公式正常工作:=VLOOKUP(B17,dataWeaponField,2,FALSE)"
    【解决方案2】:

    ThisWorkbook.Names("dataWeaponField") 是 Name 对象,而不是 Range 对象。 VLookup 期望后者,因此您可以简单地将这个表达式替换为 Application.Range("dataWeaponField")。

    Application. 前缀是必需的,因为您的代码位于工作表代码模块中,并且命名范围属于另一个工作表,因此我们需要应用程序对象从全局范围中获取它。

    或者,您可以使用 Application.Evaluate(yourWorkingFormula) 评估在 Excel 中有效的整个公式。

    【讨论】:

    • 第一个解决方案导致错误:运行时错误'1004':对象'_Worksheet'的方法'Range'失败。
    • 第二种解决方案也会导致错误:编译错误:未定义子或函数。
    • @chazcon 好的,因为代码在工作表代码模块中。应该是Application.Range("dataWeaponField"),见编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2017-10-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多