ok Tôi có vài lớp .NET mà tôi muốn sử dụng trong VBA. Vì vậy, tôi phải đăng ký chúng thông qua COM và tất cả những điều đó. Tôi nghĩ rằng tôi đã đăng ký COM đã tìm ra (cuối cùng) nhưng bây giờ tôi cần trợ giúp với cú pháp về cách tạo các đối tượng. Dưới đây là một số mã giả cho thấy những gì tôi đang cố gắng làm.Làm cách nào để sử dụng lớp .NET trong VBA? Trợ giúp cú pháp!
EDIT: Thay đổi đối tượng đính kèm để trả lại một ArrayList thay vì một danh sách
Các lớp .NET trông như thế này ...
public class ResourceManagment
{
public ResourceManagment()
{
// Default Constructor
}
public static List<RandomObject> AttachedObjects()
{
ArrayList list = new ArrayList();
return list;
}
}
public class RandomObject
{
//
public RandomObject(int someParam)
{
}
}
OK, vì vậy đây là những gì tôi muốn làm trong VBA (được chứng minh bằng C#) nhưng tôi không biết làm thế nào ...
public class VBAClass
{
public void main()
{
ArrayList myList = ResourceManagment.AttachedObjects();
foreach(RandomObject x in myList)
{
// Do something with RandomObject x like list them in a Combobox
}
}
}
Một điều cần lưu ý là RandomObject không có một defau công cộng lt constructor. Vì vậy, tôi không thể tạo một thể hiện của nó như Dim x As New RandomObject
. MSDN nói rằng bạn không thể tạo một đối tượng mà không có một constructor mặc định thông qua COM nhưng bạn vẫn có thể sử dụng các loại đối tượng nếu nó được trả về bởi phương pháp khác ... Types must have a public default constructor to be instantiated through COM. Managed, public types are visible to COM. However, without a public default constructor (a constructor without arguments), COM clients cannot create an instance of the type. COM clients can still use the type if the type is instantiated in another way and the instance is returned to the COM client. You may include overloaded constructors that accept varying arguments for these types. However, constructors that accept arguments may only be called from managed (.NET) code.
Added: Đây là của tôi nỗ lực trong VB:
Dim count As Integer
count = 0
Dim myObj As New ResourceManagment
For Each RandomObject In myObj.AttachedObjects
count = count + 1
Next RandomObject
Vâng tôi không thực sự cố gắng "tạo" một thể hiện của RandomObject từ VBA. Tôi chỉ cố gắng để làm việc với một danh sách các RandomObjects được tạo ra trong lớp ResourceManagement (managed .NET). – PICyourBrain
oh xin lỗi tôi đã đọc sai câu hỏi rồi. bạn muốn biết cú pháp vba cho một vòng lặp? vấn đề đầu tiên của bạn là bạn đã trả về một danh sách chung về phía com, nhưng com không hỗ trợ Generics (bạn nên có một cảnh báo trình biên dịch bắt đầu rằng đây là những gì bạn đang cố gắng làm.) Bạn có thể truy cập lớp ResourceManagement trong VBA? –
Có. Trong dự án VBA, tôi đã thêm một tham chiếu đến hội đồng .NET.Sau đó, trong VBA tôi có thể làm điều này "Dim myObj As New ResourceManagment" nhưng sau đó làm thế nào để tôi gọi phương thức AttachedObjects. – PICyourBrain