본문 바로가기
엑셀/엑셀 VBA

VBA Workbook, Sheet, Range와 Select 메서드 에러와 대책

by 한국수달보호협회장 2024. 7. 13.

Select를 굳이 왜 배울까 싶다가도 나는 코드 짤때 자주쓴다. 

 

파일 불러오거나 객체를 제대로 불러온게 맞나 확인할겸 Select를 자주쓰는데 이때 에러가 자주나온다.

 

당연히 에러 나올때마다 검색해보는데 결과가 안뜬다.. Select 메서드에는 다들 관심이 없는것 같다.

 

심지어 stackoverflow에도 내가 궁금해했던 것들이 안나온다.

 

 

너무 간단한 메서드라 그런가? 

 

문제점을 찾아보기 위해 직접 하나씩 실행해보면서 에러가 나는 구문과 안나는 구문을 나눠봤다.

 

 

 

이 코드는 실행하면 에러 안남

Range("A3").Select

 

이것도 에러 안남

Sheets(2).Select

 

근데 이렇게하면 에러가 남(빨간색 표시는 에러구문)

Sheets(2).Range("A10").Select

 

 

또 에러가 나는 것들

ThisWorkbook.Select 

ㄴ에러가 나는 이유는 그냥 Workbook 객체에는 Select를 못쓴다고한다. 이해할 필요가 없다 그냥 안되는 것

 

이것도 에러남

ThisWorkbook.Sheets(1).Range("A1").Select 

 ThisWorkbook.Sheets(1).Select 이건 에러안남

 

추가로 골때리는 점 :

코드가있는 ThisWorkbook을 A라하고 다른 파일을 B라고하자,

A파일에서 B파일을 Open하고 Activate시킨 상황에서 

ThisWorkbook.Sheets(1).Select하면 에러가 난다.

즉! B파일에서 A파일(혹은 A파일에 있는 시트)을 Select하는것은 안된다.

참고로 A파일에서 A파일에 있는 시트를 Select하는건 잘 됨.

Select가 안되는거지 Copy나 다른 메서드는 잘됨. ThisWorkbook이 A에서 B로 바뀌었다거나 그런게아님.

ㄴ 이거는 직접실행창 켜서 ?ThisWorkbook.name 입력해보면 알 수 있음

 

 

 

 

대책은 그냥 Select와 유사한 Activate 쓰면된다.

방금 위에서 본 예시에 있는 것처럼 B파일을 키고있는 상황에서 A파일을 Select하고싶으면

A파일.Sheets(1).Activate 하고 셀까지 특정하고 싶으면

Range("A1:A10").Select

 

 

Select와 Activate 차이는 다른 사이트에서 읽어보기도하고 직접 실행해봤는데 뭐 큰 차이는 모르겠다.

Range("A1:A10").Activate 

Selection.Clearcontents

코드를 입력하면 A1:A10을 지워버린다. 이걸보면 Activate는 기본적으로 Select 기능을 내포하고 있는 것 같기도하다