2010-12-07 4 views
1

마지막 행과 열을 모르는 셀 범위를 복사하려고합니다. 변수). 불행히도, 내가 범위를 참조하려고하는 방식은 변수를 사용할 때 런타임 오류 1004 (응용 프로그램 정의 또는 개체 정의 오류)를 제공하며 이유를 파악할 수 없습니다. 아래는 코드의 예입니다범위 (Excel VBA)를 복사 할 때 런타임 오류 '1004'가 발생합니다.

Dim wkbk As Workbook 
Dim copy_rng As Range 
... 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1:Y3500") 
Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), Cells(last_row_pay, last_col_pay)) 

첫 번째 Set 문은 단순히 예이며, 그것을 잘 작동합니다 (그래서 제대로 정의 wkbk 알고는 "지급"워크 시트를 찾는 것). 아무도 두 번째 Set 문이 작동하지 않는 이유를 알고 있습니까? 구문 문제가 있습니까? (디버그 중 last_row_pay 및 last_col_pay 변수 위로 마우스를 가져 가면 올바른 값인 1533 및 25를 볼 수 있습니다.) 도움을 주셔서 감사합니다.

답변

4

활성 워크 시트에 대해 Cells() 함수가 작동하고 혼동 될 수 있으므로 크기 조정 함수를 사용하십시오.

Dim wkbk As Workbook 
Dim copy_rng As Range 
Dim pay_rows As Integer ,pay_columns As Integer 
... 
pay_rows = 3500 
pay_columns = 23 
Set copy_rng = wkbk.Worksheets("Payable").Range("A1").Resize(pay_rows,pay_columns) 

여기에서 A1은 데이터의 왼쪽 상단 셀입니다.

+0

아주 잘 발견! "Payable"이외의 시트를 활성화하여 실제로 문제를 재현 할 수 있습니다. –

+0

나는이 시도하고 지금 런타임 오류 '438': 개체가이 속성 또는 메서드 (위의 설정 줄) 지원하지 않습니다. 내 생각을 들여다 보겠다.하지만 생각이 있다면 알려주지. 감사!!! – rryanp

+0

나는 게시물을 고쳤다. 데이터의 왼쪽 상단 셀을 참조하는 것을 잊었습니다. – ja72

0

복사하려는 범위는 세포의 연속 세트 인 경우, 열심히 어떤 행/열 수를 코딩하지 않고 범위의 크기를 얻을 수있는 가장 쉬운 방법을 찾아 사용하는 것입니다 CurrentRegion

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

End Sub 
여기

장점은 데이터 집합에 행/열을 추가 할 경우에도이 CurrentRegion로 새 열 및 행 제한을 작업을 귀찮게 할 필요가 없다는 것입니다 이것은 위해하는 당신

예 :

 A  B  C 
1 10 20 30 
2 40 50 60 
3 70 80 90 

Sub GetCurrentRange 

Dim rng as range 
Set rng = Worksheets("Payable").Range("A1").CurrentRegion 

Debug.Print rng.Address //Prints $A$1:$C$3 

End Sub 
,451,515,
0
with Worksheets("Payable") 
    copy_rng = .Range(.Cells(1, 1), .Cells(last_row_pay, last_col_pay)).Value 
end with 

더 라인,하지만 작품 ..

0

저도 같은 문제를 가지고 있었다. 셀 및 범위 속성을 모두 한정해야합니다.

Set copy_rng = wkbk.Worksheets("Payable").Range(Cells(1, 1), wkbk.Sheets("Payable").Cells(last_row_pay, last_col_pay))

관련 문제