ActiveX Code components aus dem .Net Framework benutzen

  • Access

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von der chris.

    ActiveX Code components aus dem .Net Framework benutzen

    Hallo liebe VB-Paradise Community, :)

    Ich beschäftige mich seit einiger Zeit mit Office-Automatisierung für Access 2007 und benutze als Referenz die Visual Basic for Applications Language Reference for Office 2010.
    In einem Beispiel wird gezeigt wie man mithilfe der CreateObject-Funktion auf ActiveX-Komponenten zugreift.
    Beim Googeln fällt (u.a. hier) auf, dass man als Parameter anscheinend auch .Net Framework -Komponenten benutzen kann, was bei mir auch super funktioniert.

    Visual Basic-Quellcode

    1. set ht = CreateObject("System.Collections.Hashtable")
    2. set al = CreateObject("System.Collections.ArrayList")
    3. set sl = CreateObject("System.Collections.SortedList")
    4. set d = CreateObject("Scripting.Dictionary")
    5. ...


    Da die VBA-Standardbibliothek ja recht dünn angesiedelt ist, muss man für Standardapplikationen (Listen, diverse Bäume, Hashtables, Streams, Regexp, usw.) zwangsläufig diese Objekte benutzen. Leider gelingt es mir nicht richtig mit Objekten zu arbeiten, die polymorphes oder generisches (zB. System.Collections.Generics) Verhalten haben.

    konkretes Beispiel für die Klasse StringBuilder :

    Visual Basic-Quellcode

    1. Public Function StringTest()
    2. Dim strb As Object, xbeliebig As Object
    3. Set strb = CreateObject("System.Text.StringBuilder")
    4. strb.AppendFormat "123123123", xbeliebig
    5. Debug.Print strb.ToString 'Ausgabe: 123123123
    6. strb.AppendFormat "{0}", "Text"
    7. Debug.Print strb.ToString 'Ausgabe: 123123123Text
    8. Debug.Print strb.MaxCapacity 'Ausgabe: 2147483647
    9. Debug.Print strb.length 'Ausgabe: 13
    10. Debug.Print strb.chars(0) 'Ausgabe: 49
    11. strb.Replace "123", "abc"
    12. Debug.Print strb.ToString 'Ausgabe: abcabcabcText
    13. strb.Append 49, 10
    14. Debug.Print strb.ToString 'Ausgabe: abcabcabcText1111111111
    15. 'Aber:
    16. strb.Append 97 'Ungültiger Prozeduraufruf oder ungültiges Argument (5)
    17. strb.Append "foo" 'Klasse unterstützt keine Automatisierung oder unterstützt erwartete Schnittstelle nicht (430)
    18. 'unter anderem:
    19. Dim q As Object
    20. Set q = CreateObject("System.Collections.Generic.Queue") 'Objekterstellung durch ActiveX-Komponente nicht möglich (429)
    21. Set q = CreateObject("System.Collections.Generic.Queue(Of Object)") 'Objekterstellung durch ActiveX-Komponente nicht möglich (429)
    22. End Function


    Welche Objekte eignen sich überhaupt und warum könnte beim StringBuilder die Append-Methode nicht funktionieren? ?(

    Gruß, Chris
    Schuss (ohne Test) ins Blaue:
    Mal folgendes probiert?

    Visual Basic-Quellcode

    1. Dim foo as String
    2. foo = "foo"
    3. strb.Append foo 'benötigt möglicherweise eine ByRef-Übergabe, die bei Konstanten nicht möglich ist
    4. strb.Append CByte(97) ' 97 allein definiert wahrscheinlich keine eindeutige Überladung
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --