此代码在单元格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
答案 0 :(得分:1)
因为您传递的是Name
对象,而不是Range
。您可以设置公式:
Range("A17").Formula = "=VLOOKUP(B17, dataWeaponField, 2, FALSE)"
或Evaluate它:
Range("A17").Value = [VLOOKUP(B17, dataWeaponField, 2, FALSE)]
此外,由于SelectionChange
在点击所选单元格时没有触发,您可以使用控件或超链接以及Worksheet.FollowHyperlink Event
答案 1 :(得分:0)
ThisWorkbook.Names("dataWeaponField")
是Name
个对象,而不是Range
个对象。 VLookup
期望后者,因此您只需将此表达式替换为Application.Range("dataWeaponField")
。
Application.
前缀是必需的,因为您的代码位于工作表代码模块中,并且命名范围属于另一个工作表,因此我们需要应用程序对象从全局范围中获取它。
或者,您可以使用Application.Evaluate(yourWorkingFormula)
评估在Excel中有效的整个公式。