2013-07-30 3 views
6

저는 VBA를 처음 접했습니다. 어떤이있을 수 있습니다, 특히 이러한 경우속성을 설정하기 전에 속성이 설정되어 있는지 확인해야 할 이유가 있습니까?

If Range("SomeRange").Locked = True Then 
    Range("SomeRange").Locked = False 
End If 

을 : 나는 엑셀 프로젝트에서 일하고 있어요 및 I는 다음과 같습니다 프로젝트에 코드를보고 계속 :

If Me.Columns(i).Hidden = True Then 
    Me.Columns(i).Hidden = False 
End If 

이 속성을 설정하기 전에 설정했는지 확인하는 이유는 무엇입니까? 아니면 그냥 쓸모없는 체크입니까? 확실히 VBA 엔진은 불필요한 일을하지 않도록 내부 점검을해야합니다.

+4

제가 생각할 수있는 유일한 이유는 누군가가 작성한 코드 라인의 양에 따라 돈을 받고 있다는 것입니다. 이것은 쓸모없는 것이 아니라 쓸데없는 수표로 인해 전기가 낭비되는 것입니다. – Renan

+1

@Renan, 필요하지 않습니다 ... 다른 가능한 답변을 참조하십시오 ... –

답변

5

누군가 내가 분석 한 코드를 만든 이유를 알고 있다고 생각합니다. 이러한 상황의 원인은 Bovey, Rob/Wallentin, Dennis/Bullen, Stephen/Green, John의 제목에서 찾을 수 있습니다. "전문 Excel 개발 : Microsoft Excel 및 VBA를 사용하여 응용 프로그램을 개발하는 데 필요한 확실한 안내서 및 .NET" 어떤 챕터 (또는 완료) 당신이 인터넷에서 찾을 수 있습니다. 마이크로 및 매크로 최적화 전용 장이 있습니다. 의 나에게 질문을 의미 하나를 인용 보자 :

시험에게 속성 그것을 작성하는 것보다 훨씬 빠르게 속성을 읽을 종종 그에게

을 설정하기 전에. 변경해야하는 경우 속성 값이 인지 여부를 확인하여 속성 만 업데이트하면 시간을 절약 할 수 있습니다. 예를 들어 Range.Font.Bold의 값을 읽고 만 True로 설정하면 True로 설정됩니다. 이는 작성한 코드의 양을 줄이기위한 일반적인 규칙 인 과 모순되지만 속성을 불필요하게 설정하는 것을 피할 수있게 허용하면 상당한 성능 향상을 제공합니다 ( ).

나는 그것이 진실인지 아닌지를 확인하지 않을 것입니다. 그러나 나는 책의 저자를 오히려 신뢰합니다.

+0

KazJaw, 견적과 참고에 감사드립니다. 예를 들어 큰 피벗 테이블에서'ViewCalculatedMembers'와 같은 속성을 검사하지 않고 설정하면 아마도 차이가 생길 수 있습니다. 그러나 Range ("SomeRange") 같은 것들은 잠겨 있습니다. = True'? 당신의 견해로 이런 종류의 점검으로 표기법을 어지럽히는 것이 너무 극단적이지 않습니까? – Ioannis

+2

@Ioannis, 인용 된 텍스트를 보라. 정말 의심스러운 간단한 'Range.Font.Bold' 예제가있다. 필자는 그것을 결코 테스트하지 못했지만 (어렵지는 않을 것이다), 필자는 필자에게 약간의 연장을 신뢰한다. 코드 최적화 과정을 설명하는 전체 단락에는 전체 텍스트를 납득시키는 몇 가지 흥미로운 팁이 있습니다. –

+2

'Range ("A"& n) .Locked Then Range ("A"& Locked = False)를 사용하여 모든 셀을 잠금 해제하고 2010 년 전체 열에 대한 빠른 테스트를 평균 40 초 이상 빠르게 수행 단순히 Range ("A"& n) .Locked = False'를 사용하는 것보다 더 쉽습니다. 실생활에는 상황에 따라 상당한 차이가있을 것입니다!;-) – JosieP

1

아마 쓸데없는 검사 일 것입니다. 특정 열/행이 숨겨져있을 때 다른 논리가 관련되어 있지 않으면 추가 체크가 필요한 많은 이유가 없습니다.

관련 문제