programing

에 의해 정의된 경우 .in .Range가 필요합니다.세포?

goodsources 2023. 6. 15. 21:48
반응형

에 의해 정의된 경우 .in .Range가 필요합니다.세포?

이것이 '베스트 프랙티스'가 아니라는 것은 거의 널리 받아들여지고 있습니다.

dim rng as range
with thisworkbook    '<~~ possibly set an external workbook 
    with .worksheets("sheet1")
        set rng = .range(cells(2, 1), cells(rows.count, 1).end(xlup))
    end with
end with

2개의 범위.Range 객체의 범위를 정의하는 셀 속성은 ActiveSheet 속성으로 기본 설정됩니다.시트 1이 아닌 경우( 로 정의됨).상위 항목 사용... 문장으로 종료), 할당이 실패합니다.

Run-tim error '1004': Application-defined or object-defined error

솔루션: 사용.Cells것은 아니다.Cells사건 종결.

그렇지만.....

이것은. 범위일 때 이 범위 개체 정의에 필요합니다. 속성은 을 상속합니다.대상...에 정의된 상위 워크시트 속성 문으로 끝냅니까?

어떻게 이럴 수 있죠?

dim rng as range
with thisworkbook    '<~~ possibly set an external workbook 
    with .worksheets("sheet1")
        ' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A
        set rng = .range(.cells(2, 1), .cells(rows.count, 1).end(xlup))  '<~~ .range
    end with
end with
debug.print rng.address(0, 0, external:=true)

이것과는 다릅니다.

dim rng as range
with thisworkbook    '<~~ possibly set an external workbook 
    with .worksheets("sheet1")
        ' define rng as Sheet1!A2 to the last populated cell in Sheet1!A:A
        set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup))  '<~~ range not .range
    end with
end with
debug.print rng.address(0, 0, external:=true)

우리는 사용합니다..range범위의 범위를 정의하는 매개변수가 모호할 경우(예:.range([A1])A1셀은 워크시트에 있을 수 있으며 기본적으로 다음이 없는 ActiveSheet 속성으로 사용됩니다..하지만 범위를 정의하는 범위가 상위 워크시트를 제대로 참조했는데 범위 개체의 상위를 참조해야 하는 이유는 무엇입니까?

여기서 제 의견은 조금 다릅니다.

, 필수 항목입니다.사용자가 코드를 실행할 수 있는 위치를 항상 제어할 수는 없습니다.

이 몇 가지 테스트 사례를 고려해 주십시오.

시나리오

워크북에는 두 개의 워크시트가 있습니다.시트 1 및 시트 2


테스트 1(모듈에서 실행)

두 코드 모두 동일한 결과를 제공합니다.

테스트 2 (시트 1의 시트 코드 영역에서 실행)

두 코드 모두 동일한 결과를 제공합니다.

테스트 3 (시트 2의 시트 코드 영역에서 실행)

'~~> This code fails
set rng = range(.cells(2, 1), .cells(rows.count, 1).end(xlup))

얻게 될 것입니다.Application Defined or Object defined오류

enter image description here

따라서 코드가 어디에서나 실행될 수 있도록 객체를 적절하게 검증하는 것이 항상 권장됩니다.

그가 아니다..코드가 다음에 있지 않는 한 괄호 안의 셀 참조가 적격한 경우에는 필요하지 않습니다.Worksheet모듈.그것은 달리는 것이 더 빠르다고 말했습니다.set rng = .range(.cells(...), .cells(...))달리는 것보다set rng = range(.cells(...), .cells(...))그래서 그를 포함해서..약간의 도움이 됩니다.

당분간Worksheet모듈, 더.필수 항목입니다.

답은 코드가 워크시트 개체에 있는 경우에만 가능합니다.워크시트 개체가 확장 가능하고 다음을 모두 갖는 유일한 개체이기 때문이라고 생각합니다.Range기능.언제Range워크시트에서 호출된 개체입니다.Range함수에 범위가 있습니다.코드가 이 워크북이나 사용자 모듈 또는 클래스에 있을 때,Range가 가장 사용가범가가장함전다니입역수는운입니다.Range가 없는 Range함수)를 선택합니다.저것은 그것에 묶여 있습니다.Application전달된 매개 변수를 기반으로 문제를 해결하고 올바른 워크시트로 호출을 전달해야 합니다.

언급URL : https://stackoverflow.com/questions/36368220/is-the-in-range-necessary-when-defined-by-cells

반응형