2012-02-07 58 views
12

Tôi đang cố gắng xác định loại dữ liệu của riêng mình và đặt nó trong Từ điển dưới dạng giá trị. VBA phàn nàn rằng nó không chấp nhận kiểu dữ liệu của tôi. Bất kỳ ý tưởng về làm thế nào để có được điều này làm việc?Cách đặt kiểu dữ liệu do người dùng xác định vào từ điển

Option Explicit 

Public Type Translation 
    german As String 
    french As String 
    italian As String 
End Type 

Private resource As Object 

Public Sub addTranslation(key As String, g As String, f As String, i As String) 
    Dim trx As Translation 
    trx.german = g 
    trx.french = f 
    trx.italian = i 

    resource.add key, trx '<== here VBA is complaining 
End Sub 

Public Sub initResource() 
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary") 
End Sub 

Đây là messge lỗi:

loại Chỉ người dùng xác định theo quy định tại các module đối tượng nào có thể bị cưỡng chế hoặc từ một biến thể hoặc thông qua các mô-đun cuối-bound.

+0

Thông báo là gì? – BNL

+0

Chỉ các kiểu do người dùng định nghĩa được xác định trong các mô-đun đối tượng công khai mới có thể bị ép buộc hoặc từ một biến thể hoặc được chuyển đến các mô-đun bị ràng buộc trễ. –

+0

Nếu bạn thay đổi dòng thành "resource.Add key, trx.french" thì nó sẽ biên dịch, nhưng tôi không thể biết mục tiêu của bạn là gì. Có phải "bla" = "thêm" không? –

Trả lời

11

Sau khi một số đào hơn tôi tìm thấy câu trả lời này:

Nếu bạn muốn đặt người dùng định nghĩa kiểu dữ liệu vào một từ điển của Bộ sưu tập, bạn phải xác định nó như là lớp. Bạn có thể làm như vậy bằng cách thêm một mô-đun lớp mới và chỉ cần thêm đoạn mã này:

Public german As String 
Public french As String 
Public italian As String 

Kể từ khi tôi đặt tên cho mô-đun lớp xuyên, mã kết quả của tôi trông như thế này:

Private resource As Object 

Public Sub addTranslation(k As String, g As String, f As String, i As String) 
    Dim trx As trans 
    Set trx = New trans 
    trx.german = g 
    trx.french = f 
    trx.italian = i 

    resource.Add k, trx 
End Sub 

Public Sub initTranslations() 
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary") 
End Sub 

Bây giờ tôi có thể tự động thêm bản dịch.

+1

Cảm ơn. Điều này thật ngu ngốc, và cũng áp dụng cho việc trả về mảng của một kiểu/lớp do người dùng xác định ... – enderland

+4

Tôi bước ra khỏi VBA, tôi thề nó mãi mãi. Tôi trở lại, dabbling. Tôi quên bản thân mình và lội ngược dòng .... cho đến khi sự thất vọng rửa trôi tôi một lần nữa ... Mang theo nó là sự xấu hổ bị lừa lần thứ hai. Câu hỏi & trả lời ngắn gọn. – colemand77

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