Excel에서 매크로와 vba를 처음 사용했습니다. 현재 저는 직장에서 인보이스 템플릿을위한 VBA 매크로 작업을하고 있습니다. 그러나 원인을 추적하는 데 문제가 있음을 알 수없는 오류가있는 부분에서 실행 중입니다.0으로 나누기 제로 또는 0으로 제수 (VBBA)
이VATRMB = 0
두 번째 부분은 :
VATRMB = VATRMB + (0.0593 * (ActiveSheet.Range("I" & i).Value/(1 + 0.0593)))
희미한 VATRMB가 저장되어 다음과 같이
가끔, 팝업 곳코드의 두 가지 특정 라인 ..
첫 번째 부분이 있습니다
Dim startRow As Integer, endRow As Integer, VATRMB As Single, VATEUR As Single, VATUSD As Single, VATRMBCell As Range, VATEURCell As Range, VATUSDCell As Range
나는이 선들이 제로 오류에 의한 구분을 던져서는 안된다는 것을 보았습니다. 첫 번째 경우에는 약수가 전혀없고 두 번째 경우에는 항상 양수입니다.
이 오류가 발생할 수있는 이유에 대해 알고 계신 분 있습니까? 하위가 동일한 VATRMB Dim을 재사용하면서 여러 번 호출된다는 사실과 관련이 있습니까? 각 하위 호출 후에 재설정해야합니다. 맞습니까? 아니면 VATRMB을 Single로 지정한다는 사실과 관련이있을 수 있습니까? 이것은 '작은'(1,000,000 이하) 부동 소수점에 적합합니까?
는 편집 :
'Debug.Print Tab(10); ("Items will be searched in rows " & startRow & " thru " & endRow) 'Serves for debugging and testing
For i = startRow To endRow 'Loop the following code through all rows mentioned above
If ActiveSheet.Range("B" & i).Find("Membership") Is Nothing Then 'If nothing is returned when searching for "Membership"; i.e. if the item in this row is not a membership payment
If Not ActiveSheet.Range("H" & i).Find("RMB") Is Nothing Then 'If the value for this item is RMB denoted
'Debug.Print Tab(20); "Item on Row " & i & " is RMB denoted, VAT = " & ((ActiveSheet.Range("I" & i).Value/(1 + 0.0593)) * 0.0593) 'Serves for debugging and testing
VATRMB = VATRMB + (0.0593 * (ActiveSheet.Range("I" & i).Value/(1 + 0.0593))) 'Add row's VAT to VAT total
End If
If Not ActiveSheet.Range("H" & i).Find("EUR") Is Nothing Then 'If the value for this item is EUR denoted
'Debug.Print Tab(20); "Item on Row " & i & " is EUR denoted, VAT = " & ((ActiveSheet.Range("I" & i).Value/(1 + 0.0593)) * 0.0593) 'Serves for debugging and testing
'MsgBox VATEUR + 0.0593 * ActiveSheet.Range("I" & i).Value/(1 + 0.0593)
VATEUR = VATEUR + (0.0593 * (ActiveSheet.Range("I" & i).Value/(1 + 0.0593))) 'Add row's VAT to VAT total
End If
If Not ActiveSheet.Range("H" & i).Find("USD") Is Nothing Then 'If the value for this item is USD denoted
'Debug.Print Tab(20); "Item on Row " & i & " is USD denoted, VAT = " & ((ActiveSheet.Range("I" & i).Value/(1 + 0.0593)) * 0.0593) 'Serves for debugging and testing
VATUSD = VATUSD + (0.0593 * (ActiveSheet.Range("I" & i).Value/(1 + 0.0593))) 'Add row's VAT to VAT total
End If
Else 'Else, i.e. if the row contains a membership payment, then essentially nothing happens
'Debug.Print Tab(20); ("Item on Row " & i & " is a membership payment; no VAT paid.") 'Serves for debugging and testing
End If
Next
: 사용되는 코드의 전체 블록은, 어쩌면 한 두 가지를 명확히하는 데 도움이 여기에 희미한 저장
2. 호출에 사용
1. 추가 정확한 라인입니다
그래서 기본적으로 인보이스의 모든 항목 (startRow에서 endRow까지)을 반복하고 항목이 '유형'문자열 (B 열)을 구문 분석하여 멤버십 결제인지 확인합니다. 그런 다음 회원 급여 여부에 따라 VAT를 결정하고 지급되는 통화를 확인하십시오. 지불 금액은 부동 소수점으로 I 열에 저장됩니다.
변수를 밝게하기 위해 사용하고있는 정확한 행을 공유 할 수 있습니까? 때때로 사람들은 그 지역에서 실수를 저 지르며 그들이 어리 석다 고 생각하는 것에 어긋나지 않습니다. –
시트에 ** ** 열에 ** 포함 된 값의 예를 들려 줄 수 있습니까? Excel03 및 Excel13에서 DIV0 오류가 계산되지 않습니다! – AKDADEVIL
@matzone, 안돼! –