使用VBA根据表格格式化货币

时间:2018-08-27 07:36:41

标签: excel vba excel-vba formatting currency-formatting

因此,我想通过对不同工作表上的命名范围(名为“ currencies”)进行vlookup,根据“ O”列中表示的货币对“ AC”列中的值应用数字格式)

这是有问题的代码,它抛出有关“无法获取WorksheetFunction类的VLookup属性”的错误

String name = fileSave.getFileName();
File file = new File(name);
file.createNewFile();

这是包含命名范围“ currencies”的表

enter image description here

对于为什么这样不起作用以及我如何使其能够更灵活地抛出那些实际上将要使用此宏的人不会理解的错误,任何人都有建议吗?

1 个答案:

答案 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