2013-09-16 4 views
0

일부 워크 시트에서 작동하는 것처럼 보인 매크로를 코딩했지만 다소 부담 스럽습니다. 변경 사항을 만들 수 있는지 또는 동일한 작업을 완료하는 완전히 다른 매크로를 확인하십시오. 여러 개의 지정된 열에서 "EUR"또는 "USD"값을 찾고 있습니다. 두 값 중 하나가 발견되면 매크로는 인접한 셀에서 계산을 수행 한 다음 원래 셀의 값을 AED로 변경합니다.Excel 매크로 던짐 오류

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 

시트의 일부 데이터에 문제가 발생하여 숫자가 아니며 매크로에서 오류가 발생합니다. 어떻게 그 오류를 무시할 수 있습니까?

어떤 도움을 주시면 감사하겠습니다

...

+0

Activecell 및 활성화를 사용하지 마십시오. [THIS] (http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select/10718179#10718179) –

+0

계산을 수행하기 전에 셀에 숫자가 있는지 확인하지 않는 이유는 무엇입니까? 가치? –

+0

고마워요. Siddharth -저기서 머리를 감았습니다. - 따라서 여기에 몇 가지 질문을합니다 ... – totalpackage

답변

2

나는 보통 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