일상생활 중에는 생략해도
상관없는 것이 있습니다. 누군가와 대화를 하면서 주어나 목적어를 말 안 해도 상대방은 알아서 이해를 하죠.
집 주소를 적을 때도 대한민국~으로 시작할 필요는 없습니다. (예전에 필자는 동사무소에서 등본을 떼면서도
“xx시 xx구~”까지 적는 고지식함을 가졌습니다. 요즘은 신분증만 보여주면 되더군요)
프로그래밍의 세계에서는 생략 가능한 것이 있습니다. 폼 컨트롤 중에서는 Label컨트롤의 Caption이
그러하고, TextBox컨트롤의 Text속성이 그러합니다. 또한 Range개체의 Value속성이 그러한
부류 중 하나인데, 이것은 디폴트 속성이기 때문입니다.
Dim rng As Range
Set
rng = Range(Sheet1.Cells(2, 2), Sheet1.Cells(4, 4))
rng = "value생략"
위의 코드는
rng.Value
대신 rng를 사용해도 됩니다. 또한 다음과
같은 코드 역시 Value가 없어도 상관없죠.
Sheet1.Cells(1, 1).Value = 3
Sheet1.Cells(2, 1) = 3
Debug.Print Sheet1.Cells(1, 1).Value
Debug.Print Sheet1.Cells(2, 1)
Cells(1, 1).Value와 Cells(1, 1)은 분명히 다른
존재입니다. Cells(1, 1).Value는 Range개체의 속성이고 Cells(2, 1)는
Range개체 자체가 됩니다. 평소에는 잘 의식하지 못하지만 둘의 차이는 Collection개체에
집어놓고 [조사식]창에서 관찰해보면 알 수 있습니다.
Collection개체변수인 clt를 [조사식]에 추가하고 다음과 같이
코드를 한 줄줄 한 줄 실행해나가면서 [조사식]창을 관찰해 보았습니다.
Dim clt As New Collection
clt.Add Sheet1.Cells(1, 1).Value
clt.Add Sheet1.Cells(2, 1)
처음
Add할 때는 Value속성을 명시하였고, 다음 Add할 때에는 Value속성을 생략했습니다. 다음의
[조사식]창에서 여러분이 눈 여겨볼 부분은 [Item 1]의 [형식]컬럼에는
‘Variant/Double’이,
[Item 2]의 [형식]컬럼에는
‘Variant/Object/Range’가
있음을 볼 수 있을 겁니다.
이는
[Item 1]에는 Double형 숫자 값이 저장되어 있지만, [Item 2]에는 Range개체가
저장되어 있다는 의미입니다. Range 개체이기 때문에 [Item 2]하단에는 Range개체의 여러 가지
속성이 부속되어 있습니다. 이것은 ADO Fields개체의 Value속성도 마찬가지입니다.
필자의 생각에는 비록 이러한 속성들을 생략할 수 있지만 그래도 명시해주는 것이 좋습니다.
rng = "value생략"이라는 문장에서 rng를 문자열 변수로 오해할 수 있을테니까 말이죠. |