Fehlermeldung:Unbehandelte Ausnahme: System.NotSupportedException

  • VB.NET
  • .NET 4.5

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Oelkanne.

    Fehlermeldung:Unbehandelte Ausnahme: System.NotSupportedException

    Guten Abend,
    Ich versuche gerade meien ersten Schritte mit VB. (Visual Studio runtergeladen und einfach mal gestartet)
    Klappt recht gut. Nun stehe ich von einen Problem, dass ich nicht verstehe.
    In meinem VB Quellcode habe ich folgende Anweisung:

    For Each link In IEApp.Document.Links
    If link.innertext = CN Then …..
    Next

    Die Fehlermeldung:Unbehandelte Ausnahme: System.NotSupportedException {"Ausnahme von HRESULT: 0x800A01B6"}

    In VBA läuft der Code problemlos.

    Weiß jemand rat?
    @Oelkanne Willkommen im Forum. :thumbup:
    Wie ist IEApp deklariert?
    Da wir gerade beim Debuggen sind:
    Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    IEAPP ist als Object declariert:
    Dim IEApp, link As Object

    Fehlermeldung im Detail:

    System.NotSupportedException
    HResult=0x800A01B6
    Nachricht = Ausnahme von HRESULT: 0x800A01B6
    Quelle = Microsoft.VisualBasic
    Stapelüberwachung:
    bei Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
    bei Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)
    bei ISED_Upload.ISED_starten.lookup(String lookup, String ID, String search, String CN) in C:\Users\source\repos\ISED_Upload\Form1.vb: Zeile534
    Willkommen im Forum.

    Na jetzt wird's ja noch spekulationöser.
    Late Binding ist genau deshalb ein Problem. Erst zur Laufzeit merkst Du, ob das, was Du mit dem ominösen IEAPP-Objekt machen willst, funktioniert. Daher Option Strict On die empfohlenen VS-Einstellungen verwenden. Dann siehst Du schon beim Code schreiben, ob das Objekt die Methode, die Du verwenden willst, unterstützt. Was ist denn nun effektiv IEAPP? InternetExplorer App? Woher kommt das Objekt, also aus welcher DLL/Bibliothek?

    Und überhaupt: Für welche Stelle im Code wird die Fehlermeldung angezeigt? Das wird ja in Visual Studio sehr genau markiert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @Oelkanne Als Instanz welchen Typs soll denn denn IEApp verwendet werden?
    Ich denke mal, Du holst Dir da eine Apfel-Instanz und verwendest sie so, als wäre es eine Birnen-Instanz.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das Programm liest ein xml file aus und bestückt eine Webseite.
    Visual Studio meldet den Fehler genau an der Zeile "For Each link In IEApp.Document.Links"
    Habe mal "Option Strict On" versucht. Es kommt, unter anderen, ca. 200 mal die Fehlermelldung:
    Fehler BC30574 "Option Strict On" lässt spätes Binden nicht zu. ISED_Upload C:\Users\source\repos\ISED_Upload\Form1.vb 373 Aktiv

    Hier ein (kleiner aber relevanter )Auszug aus dem Code:

    VB.NET-Quellcode

    1. Option Explicit On
    2. Public Class ISED_starten
    3. Dim IEApp, link As Object
    4. Dim url, Procedure, UserName, Password, Company_Name_required_1 As String
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles ISED_Upload_starten.Click
    6. Dim oXMLFile As Object
    7. Dim XMLFileName As String
    8. Dim list As Object
    9. Dim node As Object
    10. Dim Applicant_is_Representative As Boolean
    11. '---- XML file einlesen -----
    12. oXMLFile = CreateObject("Microsoft.XMLDOM")
    13. XMLFileName = ("C:\Users\Desktop\TEST.xml")
    14. oXMLFile.Load(XMLFileName)
    15. list = oXMLFile.SelectNodes("//*")
    16. For Each node In list
    17. If node.BaseName = "URL" Then url = node.Text
    18. If node.BaseName = "Company_Name_required_1" Then Company_Name_required_1 = node.Text
    19. Next
    20. '---- ISED Fenstersteuerung ----
    21. IEApp = CreateObject("InternetExplorer.Application")
    22. IEApp.Visible = True
    23. IEApp.Navigate(url)
    24. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    25. '---- Canadian_Representative ---
    26. For Each link In IEApp.Document.Links
    27. If link.innertext = "Canadian Representative " Then Applicant_is_Representative = True '-- Applicant in Canada?
    28. Next
    29. '---- weitere Subs ----
    30. call lookup("searchLicensee", "accountNumber", "searchAddressButton", Company_Name_required_1)
    31. call ....
    32. End Sub
    33. End Class

    Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von „Oelkanne“ ()

    @Oelkanne Da war noch eine Frage offen:

    RodFromGermany schrieb:

    Als Instanz welchen Typs soll denn denn IEApp verwendet werden?
    Ich nehme mal an, Du startest eine InternetExplorer.Application-Instanz.
    Da gibt es sicher Versionen von, und Du hast eine erwischt, die mit Deinem Code nicht kompatibel ist.
    Üblicherweise gibt es bei .NET Wrapper-Klassen für solch Objekte, die sind dann korrekt gestartet und gecastet. Da solltest Du mal auf Suche gehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Leider bin nicht so firm mit ausdrücken „Wrapper Klassen“
    Aber die Browser Versionen kann ich auch ausschließen, an zweien probiert: VB geht nicht; VBA läuft

    Bin nun aber ein Stück weiter mit der Fehleranalyse:

    Der erste Aufruf von

    Quellcode

    1. For Each link In IEApp.Document.Links
    … läuft, egal auf welcher Webseite.

    Erst beim zweiten Mal wenn

    Quellcode

    1. For Each link In IEApp.Document.Links
    … aufgerufen wird kommt es zum Fehler.

    Habe versucht mit

    Quellcode

    1. Link = nothing
    2. IEApp.Document.Links = nothing


    Zu leeren, jedoch ohne Erfolg.

    Irgendwas scheint in IEApp.Document.Links zu stecken , was dort nicht hingehört.
    zeige den Code, die ganze Methode, wenn möglich.
    Und lesbar, also mit richtigen Einrückungen.
    Benenne die genaue Fehlerzeile - die Forum-Ansicht ist ja numeriert, also das Nümmerken sagen.

    Kommt dein Fehler wirklich genau in dieser Zeile?

    VB.NET-Quellcode

    1. For Each link In IEApp.Document.Links
    Oder nicht vielleicht erst eine Zeile später?

    VB.NET-Quellcode

    1. Sub lookup(lookup As String, ID As String, search As String, CN As String)
    2. With IEApp.Document
    3. .getelementbyid(lookup).Click '-- Lockup drücken
    4. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    5. .getelementbyid(ID).Value = CN '-- CN senden
    6. .getelementbyid(search).Click '-- Suchbutton drücken
    7. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    8. For Each link In IEApp.Document.Links '|-
    9. If link.innertext = CN Then Exit For '|- CN in Liste suchen
    10. Next '|-
    11. link.Click '-- auf CN klicken
    12. Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop
    13. End With
    14. End Sub


    ...mit dem richtig einrücken klappt bei dem Forumseditor nicht so richtig ... Sorry.
    Fehler passiert in line 8

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Oelkanne“ ()

    @Oelkanne Ich denke mal, da gibt es keine implementierte Property Links.
    Ist das ggf. ein Versionsproblem?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Versionsprobleme schließe ich aus, da der Code (in VBA) mit Office 2010 und 2016 läuft.
    Gleicher Code (bei gleichen Browser) in VB mach die Probleme.

    Ziel ist es die links von Webseiten (href) zu durchlaufen bis der gesuchte gefunden wird; dann draufdrücken.

    Gibt es dafür einen alternativen Code?

    Oelkanne schrieb:

    VBA
    ist sozusagen "innen", Dein .NET-Code ist "außen".
    Möglicherweise hast Du eine falsche Klasse instanziiert.
    Mit welchem Code instanziierst Du IEApp und IEApp.Document?
    Möglicherweise gibt es da andere Klassen für.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hm,
    Was bedeutet instanziiert?

    Von der Sub "Button1_Click" (siehe obigen code) wird der Browser gestartet.

    Visual Basic-Quellcode

    1. IEApp = CreateObject("InternetExplorer.Application")
    2. IEApp.Navigate(url)


    Die Sub "Button1_Click" ruft dann sehr zahlreiche weiteren Subs auf zB. mit

    VB.NET-Quellcode

    1. Call lookup("searchLicensee", "accountNumber", "searchAddressButton", Company_Name_required_1)

    Oelkanne schrieb:

    Was bedeutet instanziiert?
    Es wird die Instanz einer Klasse erstellt, genau das macht Dein CreateObject(). Ansonsten passiert das bei New.
    Kann es sein, dass Dein IEApp vom Typ Object ist und Du Option Strict Off programmierst?
    Was hat lookup() mit IEApp zu tun?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Habe schon Option Strict On versucht.
    Fehler BC30574 "Option Strict On" lässt spätes Binden nicht zu. ISED_Upload C:\Users\source\repos\ISED_Upload\Form1.vb 373 Aktiv
    Also geht es nur ohne.
    Ja, IEApp vom Typ Object
    Lookup ist nur eine Unterroutine, wo es auch an der StelleFor Each link In IEApp.Document.Links zum Fehler :Unbehandelte Ausnahme: System.NotSupportedException {"Ausnahme von HRESULT: 0x800A01B6"} kommt.

    Wie beschrieben, beim ersten abarbeiten im Code (egal wo diese aufgerufen wird und egal auf welcher Weseite) funktioneirt die Zeile For Each link In IEApp.Document.Links. Sobald im Code ein zweites Mal (an egal welcher Stelle, egal auf welcher Webseite) kommt der Fehler Fehler :Unbehandelte Ausnahme: System.NotSupportedException {"Ausnahme von HRESULT: 0x800A01B6"}

    Ziel ist es, einen Link auf der gerade offenen Webseite (href) zu finden und draufzudrücken. Vieleicht geht das mit einem altenativen Code?.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Oelkanne“ ()