Excel VBA命名范围在VLOOKUP #VALUE错误

此代码将在单元格A8或A17中抛出一个#VALUE错误(取决于哪个触发器处于活动状态),而不是来自名为range的“dataWeaponField”的string值。 (例如)单元格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 

因为你正在传递一个Name对象而不是Range 。 你可以设置公式:

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

或评估它:

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

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

ThisWorkbook.Names("dataWeaponField")是一个Name对象,而不是一个Range对象。 VLookup期望后者,所以你可以简单地用Application.Range("dataWeaponField")replace这个expression式。

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

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