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中工作的整个公式。