2012-11-02 55 views
11

Tôi đang sử dụng một enum được định nghĩa trong một mô-đun lớp trong Excel VBA. Điều này đã được làm việc tốt, nhưng tôi đã bắt đầu nhận được một lỗi biên dịch trên mỗi khi tôi làm một so sánh về biến enum:VBA enums cung cấp thỉnh thoảng "Constant Expression Required" lỗi

Trong lớp CExample:

Enum MyEnum 
    Foo 
    Bar 
End Enum 

Ở những nơi khác:

If someValue = myEnum.Foo Then 

Văn bản .Foo sẽ được tô sáng và thông báo "Lỗi biên dịch: Biểu thức liên tục bắt buộc" bật lên.

Tìm kiếm trên Google gợi ý rằng điều này có thể xảy ra ngẫu nhiên và sửa lỗi như khởi động lại IDE hoặc thêm dấu cách sau khi khai báo enum có thể làm cho nó bắt đầu hoạt động trở lại.

Đây có phải là thực sự là một lỗi được biết trong VBA? Có bất cứ điều gì tôi có thể làm để tránh nó xảy ra, hoặc đáng tin cậy có được VBA làm việc một lần nữa nếu nó hiện lên?

Trong trường hợp của tôi, việc đóng và mở lại Excel đã không hữu ích. Xin lỗi khi tôi khởi động lại PC của mình.

Cập nhật sau khi khởi động lại:

Vấn đề kéo dài sau khi khởi động lại máy tính của tôi, đó là đáng ngạc nhiên. Tôi đã thử thêm Public trước định nghĩa enum (chúng có nghĩa là phải là public by default nhưng tôi nghĩ tôi sẽ thử) và lỗi biến mất. Tôi đã xóa từ khóa Public (vì vậy chúng tôi quay lại mã ban đầu của mình) và nó vẫn biên dịch và chạy tốt.

Có vẻ như đây là lỗi ngẫu nhiên trong VBA. Tôi muốn được quan tâm để biết nếu các nhà phát triển có kinh nghiệm đã tìm thấy điều này đi lên thường xuyên - bạn sẽ khuyên không sử dụng enums? Hay nó bật lên một lần trong một mặt trăng màu xanh và tôi chỉ là không may mắn?

Cập nhật sau 6 tuần phát triển hơn nữa:

Vấn đề không tái diễn trong suốt phần còn lại của thời gian của tôi đang phát triển dự án này, vì vậy nó có vẻ như nó là một vấn đề hiếm.

+1

Điều gì xảy ra khi bạn thực hiện 'Nếu someValue = Foo Sau đó ...'? Loại bỏ 'myEnum.' Ý tôi là –

+0

Sau khi khởi động lại, vấn đề vẫn đang xảy ra. Cảm ơn đề nghị của bạn Cthulhu, nhưng điều đó đã không giúp - cùng một lỗi biên dịch. –

+1

Dường như là một lỗi. Sao chép mã của cùng một mô-đun sang mã mới và biên dịch lại. Điều đó dường như giải quyết nó cho một số. –

Trả lời

6

Như đã lưu ý trong câu hỏi, tôi đã loại bỏ lỗi bằng cách chỉnh sửa và lưu định nghĩa enum, sau đó hoàn tác chỉnh sửa và lưu lại.Gần đây đã thực hiện thêm một số công việc khác về dự án, tôi đã tìm thấy một vấn đề khác nhưng tương tự - một dòng mã sẽ đưa ra lỗi "Loại không phù hợp", nơi không có loại không phù hợp và chức năng tương tự, không đổi, đã hoạt động tốt các đầu vào tương tự.

Một số lỗi liên tục mà tôi thấy có thể là do tích tụ các tạo phẩm mã trong tệp Excel - đã thực hiện một số đọc, tôi đã tìm thấy mã VBA được biên dịch và lưu vào tệp. Không có tùy chọn "sạch" hoặc "xây dựng lại tất cả" - VBA cố gắng tìm ra những thay đổi gia tăng cần thiết. Điều này có thể dẫn đến tất cả các loại hành vi thời gian chạy lẻ trong các dự án mà bạn đã thực hiện rất nhiều thay đổi mã. Đây có thể là nguyên nhân gây ra lỗi enum mà tôi đã tìm thấy trong quá trình phát triển ban đầu của sổ làm việc này. Phần "What It Means to Decompile and Compact in VBA" trong bài viết này cung cấp một cái nhìn tổng quan tốt.

Hầu hết các đề cập về vấn đề này khuyên bạn nên sử dụng VBA CodeCleaner: http://www.appspro.com/Utilities/CodeCleaner.htm. Chip Pearson, một chuyên gia VBA nổi tiếng và được kính trọng, nói "Tôi rất mạnh đề xuất bổ trợ này". Tôi ngạc nhiên là tôi đã không gặp chuyện này trước đây!

5

Có vẻ là một lỗi.

Sao chép mã của cùng một mô-đun sang mã mới và biên dịch lại. Điều đó dường như giải quyết nó cho một số.

Sửa lỗi tương tự tồn tại, bao gồm chỉnh sửa và hoàn tác trên dòng định nghĩa của enum.

Cân nhắc chuyển sang hằng số nếu đây là sự cố thường gặp.

0

Câu hỏi cũ nhưng chỉ trải nghiệm điều này. Loại bỏ công khai definer trên Enum và nó biên dịch tốt. Không khởi động lại IDE. Đáng ngạc nhiên điều này vẫn còn ở đây.

Các vấn đề liên quan