물려받은 매크로가 수량이 0인 주문 행을 표시하는데, 빈 행까지 전부 표시하더라고요. 검사 코드는 If ws.Cells(r, 4).Value = 0 Then이었어요. 빈 셀은 Empty가 든 Variant를 돌려주고, Empty는 0과 같다고 나와요(반대로 검사를 쓰면 ""과도 같다고 나오니까 그쪽으로도 못 이겨요). 당연히 아무도 변수를 선언하지 않았으니 매크로 전체가 Variant로 돌아갔고, 비교는 그냥 Variant가 하는 대로 했을 뿐이에요.
급한 불은 비교 전에 IsEmpty를 넣는 걸로 껐어요. 그건 됐어요. 그런데 그러다 보니 VBA에서 '여기 아무것도 없음'을 뜻하는 값이 몇 가지인지 세어 보게 됐어요. 빈 셀의 Empty, Access 필드의 Null, 객체 변수의 Nothing, "", 0, 그리고 셀에 #N/A가 보이면 오류 값까지 있어요. 표기만 여섯 가지고, 검사 방법도 다 달라요.
다들 VBA에서 '값 없음'을 어떻게 모델링하세요? 입구에서 타입 있는 변수와 플래그로 바꾸나요, 아니면 Variant를 그대로 두고 곳곳에서 VarType으로 검사하나요?