2017-06-19 138 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