因此,我想通过对不同工作表上的命名范围(名为“ currencies”)进行vlookup,根据“ O”列中表示的货币对“ AC”列中的值应用数字格式)
这是有问题的代码,它抛出有关“无法获取WorksheetFunction类的VLookup属性”的错误
String name = fileSave.getFileName();
File file = new File(name);
file.createNewFile();
这是包含命名范围“ currencies”的表
对于为什么这样不起作用以及我如何使其能够更灵活地抛出那些实际上将要使用此宏的人不会理解的错误,任何人都有建议吗?
答案 0 :(得分:-1)
在这里,我将使用评估函数,因为它有助于在vba中编写更复杂的公式。现在,由于IFERROR,如果公式不起作用,则仅空白单元格将没有错误。通过评估函数检索到值后,请应用格式。
If Not (Range("O" & i)) = vbNullString Then
If Not IsEmpty(Range("O" & i)) Then
If Evaluate("IFERROR(VLOOKUP(O" & i & ",currencies, 2, False),"""")") <> "" then
'APPLY NUMBER FORMATTING HERE
Range("AC" & i).Numberformat = ""
End if
End If
End If
根据您之前提出的问题,我想您的代码应如下所示:
If Not (Range("O" & i)) = vbNullString Then
If Not IsEmpty(Range("O" & i)) Then
If Evaluate("IFERROR(VLOOKUP(O" & i & ",currencies, 2, False),"""")") <> "" then
'APPLY NUMBER FORMATTING HERE
Select Case ("IFERROR(VLOOKUP(O" & i & ",currencies, 2, False),"""")")
Case "USD"
Range("AC" & i).NumberFormat = "$#,##0.00_);($#,##0.00)"
Case "RMB"
Range("AC" & i).NumberFormat = "[$¥-zh-CN]#,##0.00;[$¥-zh-CN]-#,##0.00"
Case "EUR"
Range("AC" & i).NumberFormat = "[$€-x-euro2] #,##0.00_);([$€-x-euro2] #,##0.00)"
Case "GBP"
Range("AC" & i).NumberFormat = "[$£-en-GB]#,##0.00;-[$£-en-GB]#,##0.00"
Case "HKD"
Range("AC" & i).NumberFormat = "[$HK$-zh-HK]#,##0.00_);([$HK$-zh-HK]#,##0.00)"
Case "JPY"
Range("AC" & i).NumberFormat = "[$¥-ja-JP]#,##0.00;-[$¥-ja-JP]#,##0.00"
End Select
End if
End If
End If