2017-02-03 1 views
0

G 열에있는 셀의 값이 "-"이면 행을 삭제하는 코드를 작성했습니다. 그러나 각 루프에 대해 셀을 참조 할 때 형식 불일치가 나타납니다. 나는 문제가 "curr.Value"에서 오는 것임을 알고 있지만, 그것을 고치는 방법을 모른다. 어떤 아이디어? 당신은 변형 및 유형을 확인에 값을 할당을 시도 할 수Excel VBA Range.Value 형식이 일치하지 않습니다?

Sub deleteRows() 
Dim curr As Range 
Dim ws As Worksheet 
Set ws = Workbooks("ExtractedColumns").Sheets("practice") 
For Each curr In 
    Workbooks("ExtractedColumns").Sheets("practice").Range("G:G") 
    If curr.Value = " - " Then 
     EntireRow.Delete 
    End If 
Next 
End Sub 
+0

@pokemon_Man – ARich

+0

당신이 그것을 당신에게 유형 불일치 오류를 줄 때 curr' '의 값을 인쇄 봤어 아니, 기술적으로는 ... 다음 줄에인가? – ARich

+1

IsError를 테스트해야합니다. – Comintern

답변

1

:

여기 내 코드입니다.

Dim vVal as Variant 


..... 

vVal = curr.Value 
if IsError(vVal) then 

etc 
.... 
+0

고마워요. – studiis

+0

죄송합니다. 오류가있는 이유는 그가 오류가있는 셀을 트래핑하지 않기 때문에 추가 변수를 지정할 필요가 없기 때문입니다. 그는 단지'If Is Error (curr.Value) Then' –

1

죄송합니다. 오류의 원인은 "답변"으로 받아 들여지지 않았습니다. '당신이 코드의 2 선 사이 -을 가지고하지 않는 한 (

For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")

, 또는 당신은 didn를 :

첫째, 때 당신에게 루프 : For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")

구문이 가정은 한 라인에 있어야합니다 갖고 계신 코드를 공유하십시오.)

그러나, 당신은 이미 이전 행에 wsWorkbooks("ExtractedColumns").Sheets("practice") 할당, 왜 For Each curr In ws.Range("G:G")를 사용하지 마십시오.

은 또한,에, 열 G 만 점유 세포를 통해, 영원히 루프를 취할 것입니다 귀하의 전체 열 G 통해 반복 : 당신이 라인 curr.Value = " - "을 발견하면,

For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)

2ns의 이유, 당신이 원하는 전체 행을 삭제하려면 curr.EntireRow.Delete을 사용해야합니다.

마지막으로 @Comintern에서 언급 한 것처럼 오류가있는 셀을 트랩해야하고 curr.Value에 다른 변수를 할당 할 필요가 없습니다. If IsError(curr.Value) Then 만 사용하십시오.

코드 내가 나머지를 볼 수없이 유형 불일치 오류가 ... 확실히 알고 열심히 문자열로 비교되는, 숫자 값을 포함 CURR에 의해 발생되는 의심

Sub deleteRows() 

Dim curr As Range 
Dim ws As Worksheet 

Set ws = Workbooks("ExtractedColumns").Sheets("practice") 

' loop through only occupied cells in Column G 
For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row) 
    On Error Resume Next 
    If IsError(curr.Value) Then ' check if cell.value return an error 
     If Err.Number <> 0 Then 
      Err.Clear 
      On Error GoTo 0 
     End If 
    Else ' current cell.value doesn't return an error 
     If curr.Value = " - " Then 
      curr.EntireRow.Delete '<-- delete entire row 
     End If 
    End If 
Next curr 

End Sub 
+0

@studiis 내 대답을 읽었습니까? –

+0

참조 변수를 추가 할 필요가 없다고 말하면 약간의 의미가 있습니다. 그것은 단지 오류가 무엇인지 그에게 설명 할 것이고 오류에 관해 뭔가를해야 할 일이었습니다. – PaulG

+0

@PaulG 그것은 pedantic 아니에요, 그것은 단지 오류의 이유가 아니야, 지금은 -1 내 대답 (어떤 오류가 없음) :) –

0

그리고 코드가 어떻게 채워지지만 대신에 If 테스트를위한 문자열을 반환하는 curr.text을 사용해보십시오. 이 도움이

희망, TheSilkCode

관련 문제