2010-11-19 11 views
1

런타임 오류 13가 발생합니다. 유형 불일치. 그러나 나는 이유를 알 수 없다. 어떤 도움이 필요합니까? VBA에서 "오류 : 형식이 일치하지 않습니다."가 발생 함

Sub Separate_with_OR_without_comission() 

Dim I As Integer 
Dim WRng As Range 
Dim NoRng As Range 
Dim NameRgn As Range 
Dim TotalCRng As Range 

Set WRng = Range("with_comission") 
Set NoRng = Range("without_comission") 
Set NameRgn = Range("total_comission_name") 
Set TotalCRng = Range("ttotal_comission") 

For I = 1 To NameRgn.Rows.Count 
    If TotalCRng.Rows(I) > 0 Then   // ERROR HERE 
     WRng.Rows(I) = NameRgn.Rows(I) 
    End If 
    If TotalCRng.Rows(I) < 1 Then   // AND HERE 
     NoRng.Rows(I) = NameRgn.Rows(I) 
    End If 
Next I 
End Sub 

내가 다른 테스트 세포를 사용하려고

문제는 그 함께, 괜찮습니다 ....하지만 그들은 "ttotal_comission"내 번호 왜 VBA는 다른 무언가로 필요합니까?

+0

여기서 "TotalCRng.Rows (I)> 0"행의 인덱스 또는 셀 값을 비교합니까? – Arseny

답변

3

문제는 Rows(I)이 범위 객체가 아닌 정수 값을 반환한다는 것입니다. 귀하의 진술 문은 TotalCRng.Rows(I).Cells(1, 1).Value이거나 가능하면 TotalCRng.Cells(1, 1).Value이어야합니다. 그대로 쓰면 Excel은 단일 셀일 경우 행 (I)의 값을 반환합니다.이 경우 범위의 value 속성이 호출되지만 그렇지 않으면보고있는 유형 불일치 오류가 발생합니다 범위를 정수와 비교하려고 시도합니다.

예 :

또한
'no error 
Debug.Print Sheet1.Range("B1") 

'type mismatch error 
Debug.Print Sheet1.Range("B1:B12") 

만 병합 된 범위의 왼쪽 위 셀은 실제로 값을 반환합니다 명심.

2

이 같은 구조를 사용하여 사용할 수 있습니다

for each c in range("rangeName1") 
    'if the source range is 3 columns to the right, same row' 
    c = c.offset(0,3).value 
next c 
0

각 행의 셀 값을 확인하려는 경우 셀을 반복하여 값을 개별적으로 비교해야합니다.

범위가 단일 열일 경우 각 행을 반복하지 않고 동일한 효과에 대해 각 셀을 반복 할 수 있습니다.

For I = 1 To NameRgn.Rows.Count 
    For j = 1 to NameRgn.rows(I).cells.count 
    If TotalCRng.Rows(I).cells(j).value > 0 Then   // ERROR HERE 
     WRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j) 
    End If 
    If TotalCRng.Rows(I).cells(j).value < 1 Then   // AND HERE 
     NoRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j) 
    End If 
    Next j 
Next I 
관련 문제