2014-07-17 3 views
0

VBA를 처음 사용하고 문자열이있는 열을 통과하는 프로그램을 디자인하려고합니다. 모든 고유 한 String 이름은 해당 String 값을 이름으로 사용하는 새 워크 시트 객체를 만든 다음 해당 행의 값을 복사하여 새 시트에 붙여 넣습니다. 모든 동일한 문자열은 또한 그 행의 값을 새 시트로 복사해야합니다.런타임 오류 '13'유형 불일치, int로 long을 대체하면 런타임 오류 '6'오버플로

longs를 입력하는 동안 셀 값을 계산하려고하는 코드에서 런타임 오류 '13'유형 불일치가 발생합니다. 예 : 셀 (long x, long y). 값. 문제를 피하기 위해 int로 값을 변경해 보았습니다. 그렇지만 내 문서가 단지 2272 행이고 코드가 한 번 반복되기 전에 오류가 발생하더라도 런타임 오류 '6'오버플로 오류가 발생합니다. 루프. 코드는 다음과 같습니다.

Sub FilterByClass() 
Dim i As Long 
Dim j As Long 
Dim k As Long 
Dim sheetName As String 

ActiveSheet.Name = "AllClasses" 
sheetName = Worksheets("AllClasses").Cells(2, 1).Value 
Worksheets.Add 
ActiveSheet.Name = sheetName 
Worksheets("AllClasses").Activate 
ActiveSheet.Rows("1:2").Copy 
Worksheets(sheetName).Paste 
j = 3 
k = 0 
For i = 3 To Rows.Count 
    If Worksheets("AllClasses").Cells(i, 1).Value <> Worksheets("AllClasses").Cells(i - 1, 1).Value Then 
     Worksheets("AllClasses").Rows("1:1, j:(i-1)").Copy ***Where the error takes place 
     Worksheets(Worksheets("AllClasses").Cells((i - 1), 1).Value).Paste 
     j = i 
     sheetName = Worksheets("AllClasses").Cells(i, 1).Value 
     For Each sheet In ActiveWorkbook 
     If sheetName = sheet.Name Then k = 1 
     Next sheet 
    If k = 1 Then k = 0 
    Else 
     Worksheets.Add 
     ActiveSheet.Name = sheetName 
     Worksheets("AllClasses").Activate 
    End If 
Next i 
End Sub 

도움이 되셨습니까? 그리고 코드의 나머지 부분에서 분명히 의도 한대로 작동하지 않는 것으로 보이는 것이 있으면 그것을 지적하십시오. 감사합니다

답변

0

당신이하지 말아야 할 때 문자열 리터럴을 사용하고 있습니다. "J, 1 : 1 (I-1)"

Worksheets("AllClasses").Rows("1:1, j:(i-1)").Copy

리터럴 할당이며,이 부분은 문제가있다 : J (I-1).

무엇이든 인용 부호 안에는 리터럴 문자열이 있습니다. 변수 ji에 저장중인 정수/long 값으로 계산되지 않습니다.

Type Mismatch은 긴 정수가 예상되는 문자열을 보내기 때문에 발생합니다. 당신의 변수 As Long을 선언 유지하고 행 개체를 대신 범위를 사용하려면이 행을 변경해

:

Worksheets("AllClasses").Range("1:1," & i-1 & ":" & j).Copy 
+0

여전히 같은 오류가 무엇을 당신이 말한 것은 인 경우에 ... – djar

+0

또한 왜 것 내 longs를 int로 바꿀 때 같은 형식 불일치 오류 대신 오버플로 오류가 발생합니까? – djar

+0

어떤 오류가 발생 했습니까? 과다? –