簡體   English   中英

Excel VBA VLOOKUP #VALUE錯誤中的命名范圍

[英]Excel VBA Named Range in VLOOKUP #VALUE error

這段代碼在單元格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

因為您要傳遞Name對象而不是Range 您可以設置公式:

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

評估

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

此外,由於在單擊選定的單元格時不會觸發SelectionChange ,因此可以使用Control或Hyperlink和Worksheet.FollowHyperlink事件

ThisWorkbook.Names("dataWeaponField")是一個Name對象,而不是Range對象。 VLookup期望使用后者,因此您只需將其替換為Application.Range("dataWeaponField")

Application. 前綴是必需的,因為您的代碼在工作表代碼模塊中,並且命名范圍屬於另一個工作表,因此我們需要應用程序對象從全局范圍中獲取它。

或者,您可以使用Application.Evaluate(yourWorkingFormula)評估可在Excel中正常使用的整個公式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM