programing

Excel VBA, 비활성 시트에서 범위 가져오기

closeapi 2023. 5. 6. 14:59
반응형

Excel VBA, 비활성 시트에서 범위 가져오기

이 스크립트는 "Temp" 시트를 볼 때 잘 작동합니다.하지만 제가 다른 시트에 있을 때 복사 명령은 실패합니다.그것은 제공합니다.Application-defined or object-defined error:

Sheets("Temp").Range(Cells(1), Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial

이 스크립트를 대신 사용할 수는 있지만 붙여넣는 데 문제가 있습니다.

Sheets("Temp").Columns(1).Copy
Sheets("Overview").Range("C40").PasteSpecial

이 메시지를 얻기 위해 "온도" 시트를 활성화하고 싶지 않습니다.

제가 뭘 더 할 수 있을까요?

당신의 문제는 그 이유가Cell내부 참조Range는 자격이 없습니다. 기본 시트를 가리키며, 이 시트는 사용자가 의도하는 시트가 아닐 수 있습니다.표준 모듈의 경우,ThisWorkbook모듈, 사용자 지정 클래스 및 사용자 양식 모듈, 기본값은ActiveSheet.위해서Worksheet모듈 뒤에 있는 코드, 그것은 워크시트입니다.

모듈 뒤에 있는 워크시트 코드 이외의 모듈의 경우 코드는 다음과 같습니다.

Sheets("Temp").Range(ActiveSheet.Cells(1), ActiveSheet.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial

모듈 뒤에 있는 워크시트 코드의 경우 코드는 다음과 같습니다.

Sheets("Temp").Range(Me.Cells(1), Me.Cells(1).End(xlDown)).Copy
Sheets("Overview").Range("C40").PasteSpecial

두 경우 모두 솔루션은 동일합니다. 필요한 워크북을 사용하여 범위 참조를 완전히 검증합니다.

Dim sh1 As Worksheet
Dim sh2 As Worksheet

Set sh1 = ActiveWorkbook.Sheets("Temp")
Set sh2 = ActiveWorkbook.Sheets("Overview")

With sh1
    .Range(.Cells(1,1), .Cells(1,1).End(xlDown)).Copy
End With
sh2.Range("C40").PasteSpecial

참고: 사용 시.End(xlDown)예상보다 더 멀리 범위가 확장될 위험이 있습니다.사용하는 것이 좋습니다..End(xlUp)시트 레이아웃이 가능한 경우.그렇지 않은 경우 아래의 셀과 참조된 셀을 확인합니다.Empty첫번째.

저는 이런 문제를 직접 겪었습니다.셀 색상이 목록의 셀 색상과 일치하는지 확인하고 문자열 값을 반환하기 위해 별도의 워크시트를 검색하려고 했습니다. 사용 중인 경우.셀(행, 열), 필요한 것은 다음과 같습니다.시트("시트 이름").셀(행, 열) - 해당 셀 범위를 참조합니다.

저는 500개의 세포 블록을 돌고 있었고, 그것은 저에게 놀라울 정도로 빠르게 작동합니다.

저는 이것을 시도해 본 적이 없습니다.알겠습니다, 하지만 같은 방식으로 작동할 거라고 생각합니다.

이렇게 하면 됩니다. 셀이 비어 있는 경우에는 (xlDown)을 사용하고 싶지 않습니다.

Dim lRow As Long
lRow = Sheets("Temp").Cells(Cells.Rows.Count, "A").End(xlUp).Row

With Sheets("Temp")
     .Range("A1:A" & lRow).Copy Sheets("Overview").Range("C40")
End With

또는 열만 사용하려면...

Sheets("Temp").Columns(1).SpecialCells(xlCellTypeConstants).Copy Destination:=Sheets("Overview").Range("C40")

언급URL : https://stackoverflow.com/questions/8047943/excel-vba-getting-range-from-an-inactive-sheet

반응형