2011-12-20 4 views
1

c27에서 각 셀에 함수 AddColumnofData를 실행하고 오른쪽에 인접하지 않은 모든 비어 있지 않은 셀을 실행해야하지만 "런타임 오류 424 개체 필요"가 발생합니다. 고맙습니다.셀 범위를 루핑

Set col = Range("$C$27", Range("$C$27").End(xlToRight)) 

For Each c In col 
    AddColumnofData (c) 
Next c 
+0

'AddColumnofData'는 무엇을합니까? 귀하의 기능 속도를 최적화 할 수 있습니까? – brettdj

답변

3

당신은 AddColumnofData

로 정의
Sub AddColumnofData(c As Range) 
    ... 
End Sub 
그것에 전화가

AddColumnofData c 

할 필요가

DIM

제시의 조언 (즉, 괄호를 제거하다) 당신의 변수들, 반면에 manditory는 좋은 충고입니다. col에도 적용됩니다. 모듈을 맨 위에 추가하려면 Option Explicit을 모듈 상단에 추가하십시오.

+2

또 다른 하위 코드 – JMax

0

당신이 C를 선언하면 :

Dim c as Range 

그런 일을해야 무슨.

가정에
1

함수에 전달하기 전에 범위 객체를 선언하거나 설정할 수 있습니다. 올바른 값을 함수에 전달하고 있음을 증명하려면이 값을 사용하십시오.

Dim r As Range '-- if you don't declare it as a range type you get a variant type as default 
Dim c As Range '-- this is used to store the single cell in the For Each loop 

Set r = Range("A1:D1") '-- substitute your range as per your example 

For Each c In r '-- you could also use r.cells 

    MsgBox c.Value '-- pass to your function instead of a call to the Message Box 

Next 

이것은 현재 워크 시트의 D1에 세포 A1의 값을 포함하는 4 개 메시지 상자의 일련의 생산, 당신의 범위 "R"은 심각하게 큰 경우 다음 대신을 Debug.Print에 전달.

+0

을 호출 할 때 괄호를 사용하거나 사용하지 않는 방법에 대해서는 [칩 피어슨의이 링크] (http://www.cpearson.com/excel/byrefbyval.aspx)를 참조하십시오. 호출하기 전에 개체를 선언하고 설정하는 이유는 무엇입니까? 함수? 장점은 범위의 셀에 대해 몇 가지 유효성 검사를 먼저 수행 할 수 있으며 셀 값 등을 연결할 수 있다는 것입니다. 범위가 아닌 문자열로 값을 전달할 수도 있습니다. 따라서 함수는 범위 객체 대신 문자열 함수를 처리 할 수 ​​있습니다. – Eric

관련 문제