Vba Excel宏抛出错误

Vba Excel宏抛出错误,vba,excel,Vba,Excel,我编写了一个宏,它似乎可以工作(在一些工作表上),但对我来说它似乎相当沉重。请看一看,是否可以进行更改,或者使用完全不同的宏来完成相同的任务。我在一些指定的列中寻找“EUR”或“USD”值。当找到两个值中的任何一个时,宏将对相邻单元格执行计算,然后将原始单元格的值更改为AED Option Explicit Sub Change_currency() Const EUR_to_AED = 4.9 Const USD_to_AED = 3.64 Dim R As Long Dim V1

我编写了一个宏,它似乎可以工作(在一些工作表上),但对我来说它似乎相当沉重。请看一看,是否可以进行更改,或者使用完全不同的宏来完成相同的任务。我在一些指定的列中寻找“EUR”或“USD”值。当找到两个值中的任何一个时,宏将对相邻单元格执行计算,然后将原始单元格的值更改为AED

Option Explicit

Sub Change_currency()
Const EUR_to_AED = 4.9
Const USD_to_AED = 3.64
  Dim R As Long
  Dim V1
  Dim V2
  Dim MyValue
  Dim MyValue2

  'Start at row 5
  R = 5

  While Cells(R, "K").Value <> ""
    If Cells(R, "K").Value = "EUR" Then
        Cells(R, "K").Activate
        MyValue = 4.9
        V1 = ActiveCell.Offset(0, -2).Value
        V2 = ActiveCell.Offset(0, -3).Value
        ActiveCell.Offset(0, -2).Value = MyValue * V1
        ActiveCell.Offset(0, -1).Value = V1 * EUR_to_AED * V2
        ActiveCell.Value = "AED"

    End If

While Cells(R, "K").Value <> ""
    If Cells(R, "K").Value = "USD" Then
        Cells(R, "K").Activate
        MyValue = 3.64
        V1 = ActiveCell.Offset(0, -2).Value
        V2 = ActiveCell.Offset(0, -3).Value
        ActiveCell.Offset(0, -2).Value = MyValue2 * V1
        ActiveCell.Offset(0, -1).Value = V1 * USD_to_AED * V2
        ActiveCell.Value = "AED"

End If

    'Next row
    R = R + 1
  Wend

End Sub
选项显式
子货币兑换()
欧洲至欧洲的成本=4.9
施工成本美元对美元AED=3.64
变暗,变长
暗淡V1
Dim V2
模糊MyValue
Dim MyValue2
'从第5排开始
R=5
而单元格(R,“K”)。值“”
如果单元格(R,“K”).Value=“EUR”,则
细胞(R,“K”)。激活
MyValue=4.9
V1=ActiveCell.Offset(0,-2).Value
V2=ActiveCell.Offset(0,-3).Value
ActiveCell.Offset(0,-2).Value=MyValue*V1
ActiveCell.Offset(0,-1)。值=V1*EUR\u到\u AED*V2
ActiveCell.Value=“AED”
如果结束
而单元格(R,“K”)。值“”
如果单元格(R,“K”).Value=“USD”,则
细胞(R,“K”)。激活
MyValue=3.64
V1=ActiveCell.Offset(0,-2).Value
V2=ActiveCell.Offset(0,-3).Value
ActiveCell.Offset(0,-2).Value=MyValue2*V1
ActiveCell.Offset(0,-1)。值=V1*USD\u到\u AED*V2
ActiveCell.Value=“AED”
如果结束
“下一排
R=R+1
温德
端接头
我遇到了一些问题,工作表上的一些数据不是数字,宏抛出了一个错误。那么,如何忽略这些错误呢


任何帮助都将不胜感激……

我通常更喜欢一个For…Next循环,而不是WhileWend,而且您似乎要做两次完全相同的事情,具体取决于货币,因此我将简化它:

Sub Change_currency()

    Const EUR_to_AED          As Double = 4.9
    Const USD_to_AED          As Double = 3.64

    Dim wks                   As Worksheet
    Dim lngRow                As Long
    Dim lngNumRows            As Long
    Dim c                     As Range
    Dim dblConversion         As Double

    Dim V1                    As String
    Dim V2                    As String

    Set wks = ActiveSheet

    With wks

        ' this gets the last row number in column 11 that has a value
        lngNumRows = .Cells(.Cells.Rows.Count, 11).End(xlUp).Row

        For lngRow = 5 To lngNumRows

            Set c = .Cells(lngRow, 11)

            Select Case c.Value
                Case "EUR"
                    dblConversion = EUR_to_AED
                Case "USD"
                    dblConversion = USD_to_AED
            End Select

            V1 = c.Offset(0, -2).Value
            V2 = c.Offset(0, -3).Value

            If IsNumeric(V1) And IsNumeric(V2) Then
                c.Offset(0, -2).Value = V1 * dblConversion
                c.Offset(0, -1).Value = V1 * dblConversion * V2
                c.Value = "AED"
            End If

        Next lngRow

    End With

End Sub

请避免使用Activecell并激活。在执行计算之前,您可能还想看看,为什么不检查单元格是否有数值?谢谢Siddharth-虽然我的头顶上方-因此我在这里问了一些问题…您必须从某个地方开始:)尝试合并链接中给出的提示,就像我提到的,验证单元格值并检查它们是否为数字:)