2010-06-11 30 views
7

Tôi đang phát triển một dự án VBA trong Word và đã gặp sự cố khi xử lý sự kiện khi sử dụng lớp thực hiện một sự kiện khác.Lỗi thời gian chạy 459 khi sử dụng WithEvents với một lớp thực hiện một

tôi xác định một lớp rỗng, IMyInterface:

Public Sub Xyz() 
End Sub 

Public Event SomeEvent() 

Và một lớp học, MyClass mà thực hiện ở trên:

Implements IMyInterface 

Public Event SomeEvent() 

Public Sub Xyz() 
    ' ... code ... 
    RaiseEvent SomeEvent 
End Sub 

Private Sub IMyInterface_Xyz() 
    Xyz 
End Sub 

Nếu tôi tạo ra một lớp thứ ba, OtherClass, khai báo một biến thành viên với loại của lớp giao diện:

Private WithEvents mMy As IMyInterface 

và cố gắng khởi tạo biến này với một thể hiện của lớp thực hiện:

Set mMy = New MyClass 

tôi nhận được một lỗi thời gian chạy '459': Thành phần này không hỗ trợ này tập hợp các sự kiện.

Các MSDN page cho thông báo lỗi này khẳng định:

"Bạn cố gắng sử dụng một WithEvents biến với một thành phần mà không thể làm việc như một nguồn sự kiện cho bộ quy định của sự kiện Ví dụ. , bạn có thể đang chìm các sự kiện của đối tượng , sau đó tạo đối tượng khác thực hiện đối tượng đầu tiên Mặc dù bạn có thể nghĩ rằng bạn có thể tách các sự kiện khỏi đối tượng được triển khai , không phải tự động trường hợp. Thực hiện chỉ thực hiện một giao diện cho các phương pháp và tài sản. "

Các khá nhiều tiền trên lên những gì tôi đang cố gắng làm. Cách diễn đạt, 'đó không phải là tự động các trường hợp', chứ không phải là" đây là không thể thực hiện được ", dường như gợi ý rằng có một số công việc thủ công mà tôi cần phải làm để làm cho nó hoạt động, nhưng nó không cho tôi biết những gì! Không ai biết điều này có thể xảy ra trong VBA không?

Trả lời

5

Rõ ràng các sự kiện không được phép chuyển qua lớp giao diện vào lớp bê tông như bạn muốn sử dụng "Các thao tác". Trong bài viết này, nó tuyên bố: "Khai báo sự kiện của giao diện trừu tượng không được bao gồm trong giao diện được thừa hưởng bởi các lớp cụ thể. Tôi đã không tìm thấy bất cứ nơi nào mà điều này đã được công nhận là một lỗi; tuy nhiên, nó dường như là một "

Dưới đây là liên kết tới các nguồn:.. http://www.devx.com/getHelpOn/10MinuteSolution/20416

:-(

+0

Nhờ đó; có vẻ như nó là một lỗi thôi Tôi muốn MSDN hadn Tuy nhiên, tôi nghĩ rằng tôi có một workaround, mặc dù sử dụng các sự kiện sẽ có được thanh lịch hơn C'est la vie –

+1

@KenKeenan không phải là một lỗi, thay vì làm thế nào COM sự kiện làm việc.Bạn có thể sử dụng các sự kiện cùng với giao diện bằng cách sử dụng một mô hình bộ chuyển đổi, như được hiển thị [ở đây] (https://stackoverflow.com/a/45825831/1188513). (xin lỗi đánh thức những người chết với bình luận này - Q & A này được liên kết từ một câu hỏi gần đây ... và chủ đề là IMO hấp dẫn) –

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