VBA enum에서 "Constant Expression Required" 오류가 발생할 수 있음
Excel VBA의 클래스 모듈에 정의된 열거형을 사용하고 있습니다.정상적으로 동작하고 있습니다만, 열거형 변수를 비교할 때마다 컴파일 에러가 발생합니다.
클래스 CExample:
Enum MyEnum
Foo
Bar
End Enum
기타:
If someValue = myEnum.Foo Then
'''.Foo컴파일 에러: 상수 표현 필요"라고 합니다.
Google에서 검색하면 무작위로 이러한 현상이 발생할 수 있으며, 열거 선언 후 IDE를 재시작하거나 공백을 추가하는 등의 수정으로 인해 IDE가 다시 작동하기 시작할 수 있습니다.
- http://www.tek-tips.com/viewthread.cfm?qid=1355882
- http://www.vbforums.com/showthread.php?405564-RESOLVED-Constant-Expression-Required-Error-when-checking-Enum
이게 정말 VBA에서 알려진 버그인가요?이 문제를 회피하거나 VBA가 발생했을 때 확실하게 다시 작동시킬 수 있는 방법이 있습니까?
제 경우 Excel을 닫았다가 다시 여는 것은 도움이 되지 않습니다.PC를 재부팅하는 동안 실례하겠습니다.
재부팅 후 업데이트:
컴퓨터를 재부팅해도 문제가 해결되지 않아 놀라워요.는 가해 i i i i i보 i i i를 추가해 .Publicenum 정의 앞에 (기본적으로 공개되어 있지만 시도해 봐야겠다고 생각했습니다) 오류가 사라졌습니다.삭제했습니다.Public키워드(그래서 원래 코드로 돌아옵니다)가 컴파일되어 정상적으로 실행됩니다.
이것은 VBA에서 랜덤 버그로 보입니다.경험 많은 개발자들이 이런 질문을 자주 하는지 알고 싶습니다. 에넘을 사용하지 말라고 조언해 주시겠습니까?아니면 아주 드물게 갑자기 나타나서 내가 운이 나빴던 걸까?
추가 개발 후 6주 후 업데이트:
이 프로젝트를 개발하는 동안 문제가 재발하지 않았기 때문에 드문 문제인 것 같습니다.
질문에서 설명한 것처럼 열거 정의를 편집 및 저장한 후 편집을 취소하고 다시 저장함으로써 오류를 없앴습니다.최근 프로젝트에 대해 몇 가지 작업을 더 수행한 결과, 다른 비슷한 문제가 발견되었습니다. 코드 한 줄에 "타입 불일치" 오류가 발생합니다.타입 불일치는 없고, 같은 함수는 변경되지 않고 동일한 입력으로 정상적으로 동작하고 있습니다.
간헐적으로 발생하는 오류 중 일부는 Excel 파일에 코드 아티팩트가 축적되어 있기 때문일 수 있습니다.읽어본 결과, VBA 코드가 컴파일 되어 파일에 보존되어 있는 것을 알 수 있었습니다.「클린」또는 「모두 재구축」옵션은 없습니다.VBA는, 필요한 증분 변경을 스스로 해결하려고 합니다.이로 인해 코드를 많이 변경한 프로젝트에서 모든 종류의 이상한 런타임 동작이 발생할 수 있습니다.이 워크북의 초기 개발 과정에서 발견된 열거 오류의 원인일 수 있습니다.이 문서의 "VBA에서 디컴파일 및 압축하는 것의 의미" 섹션은 좋은 개요를 제공합니다.
이 문제에 대한 대부분의 언급에서는 VBA CodeCleaner(http://www.appspro.com/Utilities/CodeCleaner.htm를 사용할 것을 권장합니다.유명하고 존경받는 VBA 전문가인 Chip Pearson은 "이 애드인을 매우 추천합니다."라고 말합니다.이런 걸 본 적이 없다니 놀랍네요!
버그인 것 같아요.
동일한 모듈의 코드를 새 모듈에 복사하고 다시 컴파일합니다.그것은 어떤 사람들에게는 해결되는 것처럼 보인다.
열거 정의 줄에서 편집 및 실행 취소와 관련된 유사한 수정 사항이 있습니다.
이 문제가 자주 발생하는 경우 숫자 상수로 전환하는 것을 고려해 보십시오.
오래된 질문이지만 방금 경험했습니다.Enum에서 Public Definer를 제거하여 정상적으로 컴파일되었습니다.IDE를 재기동하지 않았다.이게 아직 여기 있다니 놀랍네요.
저는 오늘 이 문제에 부딪혔고 다른 가능한 해결책을 찾았습니다.혹시 다른 사람에게 도움이 될까 봐 글을 올립니다.
다음 중 어느 것도 나에게 효과가 없었다.
- Excel 재시작 중
- Windows 재부팅
- 열거형에서 "Public"을 제거하는 중
- "Public(공용)"을 다시 열거에 추가하는 중
업무용 컴퓨터이기 때문에 관리자 권한이 없기 때문에 VBA 클리너 애드인을 사용할 수 없습니다.
새로운 모듈을 만들어 본 적이 없기 때문에, 그것이 기능했을지 어떨지 모르겠습니다.
하지만 엑셀을 닫고 엑셀 인스턴스를 새로 시작하고 "열어서 복구" 옵션을 사용한 것이 제겐 효과가 있었습니다.그러기 위해서는:
- 모든 Excel 창 닫기
- [시작] 메뉴에서 Excel 열기
- 왼쪽에 있는 "열기"로 이동합니다.
- "기타 위치"에서 "찾아보기"를 선택합니다.
- 문제가 있는 파일로 이동합니다.
- 우측 하단의 [Open](열기) 드롭다운 화살표를 클릭하여 [Open and Repair](열기 및 복구)를 선택합니다.."
이 문제는 오늘 저에게 제기되었습니다.어떤 이유로 인해 모듈 상단에 있는 "Option Explicit" 문장이 실수로 삭제된 것이 원인입니다.Enum선언을 합니다.다시 추가하자 바로 작동하기 시작했어요.
이 에러는, 열거형, 그 사용법, 또는 관련 코드에 변경이 없는 경우에 발생합니다.이 경우 클래스에서 'Common'이라고 하는 모듈로 열거형을 이동하고 열거형을 Private가 아닌 Public으로 만드는 것이 효과적이었습니다.
Enum에서도 같은 문제가 발생하여 선언문에 Public Enum을 추가했더니 문제가 중지되었습니다.재기동 불필요.
언급URL : https://stackoverflow.com/questions/13196909/vba-enums-give-occasional-constant-expression-required-errors
'codememo' 카테고리의 다른 글
| 단말기 출력의 행 수 (0) | 2023.04.13 |
|---|---|
| 유형 간에 변환할 수 있는 변환기를 찾을 수 없습니다. (0) | 2023.04.13 |
| Javascript를 사용하여 Excel 날짜 일련 번호를 현재 날짜로 변환 (0) | 2023.04.13 |
| 눈금 레이블 글꼴 크기 축소 (0) | 2023.04.13 |
| 파일 타입과 iPhone 어플리케이션을 관련짓는 방법 (0) | 2023.04.13 |