Tamam VBA'da kullanmak istediğim birkaç .NET sınıfım var. Bu yüzden onları COM üzerinden kaydetmeliyim ve hepsini. Sanırım COM kaydına karar verdim (nihayet) ama şimdi nesnelerin nasıl oluşturulacağının sözdiziminde yardıma ihtiyacım var. İşte yapmaya çalıştığım şeyi gösteren bazı sahte kodlar.VBA'da .NET sınıfını nasıl kullanırım? Sözdizimi yardımı!
DÜZENLEME: Değiştirilen Ekli Nesneler bir List
.NET sınıfları şuna benzer ...
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)
{
}
}
Tamam yerine ArrayList dönmek için, bu nedenle bu İsterim budur VBA yapılacak nota
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
}
}
}
bir şey RandomObject bir kamu defau sahip olmamasıdır ... (C# gösterdi) ama nasıl bilmiyorum lt kurucu. Bu yüzden Dim x As New RandomObject
gibi bir örnek oluşturamıyorum. MSDN 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.
Eklendi ... Eğer COM üzerinden bir varsayılan kurucu olmayan bir nesne örneğini edemez ama başka yöntemle döndürülür eğer hala nesne türü kullanabilirsiniz söylüyor: İşte benim VB girişimi:
Dim count As Integer
count = 0
Dim myObj As New ResourceManagment
For Each RandomObject In myObj.AttachedObjects
count = count + 1
Next RandomObject
Gerçekten VBA'dan bir RandomObject örneğini oluşturmaya çalışmıyorum. Ben sadece ResourceManagement sınıfı (yönetilen .NET) içinde oluşturulan bir RandomObjects listesi ile çalışıyorum. – PICyourBrain
oh özür dilerim, sonra sorumu yanlış anladım. Bir döngü için vba sözdizimini bilmek ister misiniz? İlk probleminiz, genel bir listeyi com tarafına döndürdüğünüz, ancak com, jenerikleri desteklemeyecektir (bunu yapmaya çalıştığınız şeyden bir derleyici uyarısı almalısınız.) VBA’daki ResourceManagement sınıfına mı erişirsiniz? –
Evet. VBA projesinde .NET derlemesine bir başvuru ekledim.Sonra VBA'da bunu "Dim myObj As New ResourceManagment" yapabilirim ancak AttachedObjects yöntemini nasıl arayabilirim? – PICyourBrain