[VBA] Herausfinden ob COM-Objekt registriert ist



  • Hi Leute,

    Ich muss in einem VBA-Code, der in einem Excel-Worksheet gespeichert ist, herausfinden, ob ein bestimmtes COM-Objekt registriert ist. Falls ja, soll dieses COM-Objekt verwendet werden, falls nicht, soll etwas anderes geschehen.
    Im Grunde brauch ich sowas:

    Set ob = CreateObject(...)
    if ob <> nil then
    ...
    else
    ...
    end if
    

    Aber das tut nicht, ich bekomm immer nen Debug-Fehler: Method not supported bei dem Vergleich auf nil.
    Außerdem bekomm ich ne Nachricht, wenn ich versuch ein Objekt per CreateObject zu erstellen, wenn die Klasse nciht registriert ist...

    Bitte im Hilfe.



  • Hallo,

    was ist mit dem Vergleich auf Is Nothing?

    Set ob = CreateObject(...)
    If ob Is Nothing Then
    ...
    Else
    ...
    End If
    

    Klappt das?

    MfG

    GPC



  • Nicht getestet aber selbst wenn: Nützt nichts, weil die Fehlermeldung beim CreateObject trotzdem kommt, wenn das COM-Objekt nicht registriert ist.



  • Ja, wie... wenn CreateObject fehlschlägt, weil dein COM-Objekt nicht registriert wurde, dann müsste ob leer sein, was wiederum beim Test auf Is Nothing bemerkt wird. Jedoch bleibt halt das Problem mit der Meldung... tjo, sorry, so weit steck ich nicht in VB drin 😞

    MfG

    GPC



  • auch wenn ich von VBA eher wenig Ahnung habe : aber du solltest doch in der registry rausfinden ob da irgendwo ein Registrierungseintrag rumfliegt (nicht schön, ist VBA aber doch sowieso nicht :))



  • Ja eben. Das Problem ist die Meldung...
    In C# würd ich ein try-catch machen, aber ka, wie und ob das in VBA auch geht...



  • TheBigW@Work schrieb:

    auch wenn ich von VBA eher wenig Ahnung habe : aber du solltest doch in der registry rausfinden ob da irgendwo ein Registrierungseintrag rumfliegt (nicht schön, ist VBA aber doch sowieso nicht :))

    Ne du, das lassen wir mal lieber 😉



  • dEUs schrieb:

    Ja eben. Das Problem ist die Meldung...
    In C# würd ich ein try-catch machen, aber ka, wie und ob das in VBA auch geht...

    Na ja, es gibt die OnError Geschichte, die funktioniert im Prinzip wie Exceptions. Kennst du die?



  • Warum schreibst Du nicht:

    On Error Resume Next
    Set ob = CreateObject(...)
    if ob <> nil then
    

    ?



  • Jochen Kalmbach schrieb:

    Warum schreibst Du nicht:

    On Error Resume Next
    Set ob = CreateObject(...)
    if ob <> nil then
    

    ?

    Weil ich es nicht kannte 😉
    Vielen Dank. Wenn ich "Is Nothing" verwende tut es dann komplett. Danke euch beiden!


Anmelden zum Antworten