2016-12-29 6 views
1

시트 사이의 일부 범위를 복사 할 때 복사 또는 붙여 넣기 전에 시트를 활성화 할 때만 작동하는 이유를 알 수 없습니다. 이 작품 :VBA 복사 및 붙여 넣기는 시트를 활성화 할 때만 작동합니다.

s.Activate 
s.Range(Cells(2, 8), Cells(lrow, 8)).Copy 
d.Activate 
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues 

이되지 않습니다 : 이미 변수 "S"와 "D"로 지정 한 경우

s.Range(Cells(2, 8), Cells(lrow, 8)).Copy 
d.Range(Cells(2, 3), Cells(lrow, 3)).PasteSpecial xlPasteValues 

왜 VBA는 시트를 활성화 할 필요합니까? Range(...)Cells(...) 방법은 자격이되지 않을 때, 그들은 활성 워크 시트에서 작동하기 때문입니다 감사합니다

+0

당신은 *** ALL *** 범위 객체를 한정해야합니다 :'s.Range (s.Cells (2, 8), s.Cells (lrow, 8)). 복사' –

+0

참고로, 클립 보드로 직접 값을 할당하십시오. d.Range (d.Cells (2, 3), d.Cells (lrow, 3)). 값 = s.Range (s.Cells (2, 8), s.Cells (lrow, 8)). ' –

+0

감사합니다. 정말 도움이됩니다! – uttuck

답변

1

.

s.Activate

s.Range (세포 (2, 8), 세포 (lrow, 8)) s가 활성 시트 아니었다면.

복사, 당신은 것 s에 속하지 않는 셀 범위를 요청하지만 다른 셀에는 활성 워크 시트가 포함됩니다.

 Cells(2, 8)  <==> ActiveSheet.Cells(2, 8) 
     Cells(lrow, 8) <==> ActiveSheet.Cells(lrow, 8) 

이 문제를 방지하기 때문에, 항상 당신의 범위와 세포 자격 :

s.Range(s.Cells(2, 8), s.Cells(lrow, 8)).Copy 

이 올바른 접근 방식이다; ActivateSelect과 같은 것을 사용하여 자신을 발견 할 때마다 가장 잘못된 것으로 생각됩니다. 좋은 연습에서는이 물건을 거의 사용할 필요가 없습니다.

+1

굉장합니다. 전에이 문제를 겪었지만 그 이유는 알지 못했습니다. 감사! – uttuck