2017-06-19 139 views
0

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

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 

回答

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

第一个解决方案抛出错误: – chazcon

+0

@chazcon它与您在问题描述中所做的相同“例如,单元格A17中的Excel公式正常工作:= VLOOKUP(B17,dataWeaponField,2,FALSE)” – Slai

+0

这两个解决方案都能很好地工作,谢谢。 – chazcon

0

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

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

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

+0

第一种解决方案导致错误: – chazcon

+0

第一种解决方案导致错误:运行时错误'1004':对象'_Worksheet'的方法'范围'失败。 – chazcon

+0

第二种解决方案也会导致错误:编译错误:Sub或Function未定义。 – chazcon