Übergeben Sie ein array von vba nach c# verwenden von com-interop
Was ist die richtige Art und Weise zu übergeben Sie ein array von benutzerdefinierten Klassen von vba .net (speziell c#) mit com-interop?
Hier ist mein c# code. Wenn ich call-Methode1 von vba es andernfalls mit "Array oder benutzerdefinierter Typ erwartet" oder "- Funktion verwendet eine Automatisierung geben Sie in visual basic nicht unterstützt".
public class MyClass
{
public Method1(UserDefinedClass[] Parameters) { ... }
public Method2(Object Parameters) { ... }
}
Ich gelesen habe, ein bisschen über die MarshallAsAttribute Klasse. Könnte dies das fehlende Stück in der c# - code?
Hier ist der vba-code, den ich verwende:
Dim udt As New UserDefinedClass
Dim myArray()
myArray(1) = udt
myClass.Method1(myArray)
myClass.Method2(myArray)
- Wir brauchen ein bisschen mehr info hier. Könntest du ein VBA-definition von Art und einige code zeigt Ihnen den Aufruf der COM-Schnittstelle?
- Hinzugefügt von vba-code.
- Deine array-Deklaration ist die Deklaration ein array von Varianten - es sollte ein array deklarieren Ihre UserDefinedClass, z.B. "Dim myArray(0 Bis 3) UserDefinedClass"
- Ich sollte erwähnt haben, dass. Ich habe versucht mit dem gleichen Ergebnis "- Funktion verwendet eine automation type not supported in vb'. Ich dachte wirklich, das Problem war die definition der Methode in c#, aber es ist durchaus möglich, das problem in den vba-code. Ich bin ganz neu VB.
Du musst angemeldet sein, um einen Kommentar abzugeben.
IIRC haben Sie das übergeben von arrays per Referenz.
Versuchen, die Erklärung Ihrer Methode als
Wenn Sie nicht wollen, um verschmutzen Ihrer Klasse mit ref-Parameter für .NET-clients können Sie festlegen, ComVisible-Schnittstelle verwendet werden, die von COM-clients, und implementieren Sie es ausdrücklich so:
** Antwort zu Kommentar **
Wenn Sie wollen zu setzen eine collection anstelle eines Arrays in VBA, müssen Sie nur verfügbar machen, ein enumerator, und alle anderen Methoden, die Sie möchten, dass der VBA-code aufrufen zu können (z.B. Hinzufügen, Entfernen, Einfügen, Löschen, ...). E. g.
Dann können Sie es wie gewohnt in VBA: