首页 文章

Excel VBA命名范围VLOOKUP #VALUE错误

提问于
浏览
0

此代码在单元格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

2 回答

  • 1

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

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

    Evaluate它:

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

    此外,因为 SelectionChange 在单击所选单元格时未触发,您可以使用控件或超链接和Worksheet.FollowHyperlink Event

  • 0

    ThisWorkbook.Names("dataWeaponField")Name 对象,而不是 Range 对象 . VLookup 期待后者,所以你可以简单地用 Application.Range("dataWeaponField") 替换这个表达式 .

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

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

相关问题