HRESULT Ausnahme in ComboBox - Behandeln?

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Stefan.

    HRESULT Ausnahme in ComboBox - Behandeln?

    Hallo,
    ich habe mich Extra hier angemeldet um Hilfe zu bekommen. Zu meiner Person. Ich bin noch relativ neu in Visual Basic, aber möchte es lernen.
    Ich habe mit anderen Projekten in VB bislang noch keine Probleme gehabt. Aber das ist bislang mein größtes Projekt. Ich lasse eine liste von einer (A) ExcelTabelle in die ComboBox2 als Items einlesen.
    Mein Problem ich bekomme beim selektieren eines Eintrags meiner ComboBox2 jedesmal eine Ausnahmemeldung (HRESULT: 0x800A03EC). Wie bekomme ich diese weg?

    Mein Code in der ComboBox2

    VB.NET-Quellcode

    1. Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
    2. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    3. Process.Kill()
    4. Next
    5. Dim objRead As New StreamReader("Path.txt")
    6. Dim lin As String
    7. lin = objRead.ReadLine()
    8. Dim PfadS As String
    9. If CheckBox1.Checked Then
    10. PfadS = (ListBox1.SelectedItem)
    11. Else
    12. PfadS = (lin & "\" & ComboBox1.Text & "\" & ListBox1.SelectedItem)
    13. End If
    14. Dim xlApp As New Object
    15. Dim Suche As String
    16. Dim SucheCB2 As String = ComboBox2.Text
    17. Dim intZähler As Integer
    18. xlApp = CreateObject("excel.application")
    19. xlApp.Application.Workbooks.Open(PfadS)
    20. xlApp.Visible = False
    21. xlApp.Sheets("Tabelle1").Activate()
    22. xlApp.Range("A1").Select()
    23. Dim z As Long = xlApp.Sheets("Tabelle1").UsedRange.Rows.Count
    24. For intZähler = 1 To z Step 1
    25. Suche = xlApp.Range("A" & intZähler.ToString).Value()
    26. If SucheCB2 = Suche Then
    27. Dim xlMappe As Microsoft.Office.Interop.Excel.Workbook = xlApp.Workbooks.Open(Filename:=PfadS)
    28. Dim xlBlatt As Microsoft.Office.Interop.Excel.Worksheet = xlMappe.Worksheets("Tabelle1")
    29. Dim labela As Microsoft.Office.Interop.Excel.Range = xlBlatt.Range("A" + intZähler.ToString)
    30. Dim labelb As Microsoft.Office.Interop.Excel.Range = xlBlatt.Range("B" + intZähler.ToString)
    31. Dim labelc As Microsoft.Office.Interop.Excel.Range = xlBlatt.Range("C" + intZähler.ToString)
    32. Dim labeld As Microsoft.Office.Interop.Excel.Range = xlBlatt.Range("D" + intZähler.ToString)
    33. TextBox4.Text = labela.Value.ToString
    34. TextBox1.Text = labelb.Value.ToString
    35. TextBox2.Text = labelc.Value.ToString
    36. TextBox3.Text = labeld.Value.ToString
    37. ComboBox3.Text = labeld.Value.ToString
    38. 'Alles schliesen
    39. xlApp.Quit()
    40. End If
    41. Next
    42. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    43. Process.Kill()
    44. Next
    45. objRead.Close()
    46. End Sub


    Ich vermute das es mit der Suche zu tun hat. (txt_server = XT.Range("A" & intZähler.ToString).Value()) :huh: . Aber ich weiss nicht wie ich die Tabelle nach meinem Text durchsuchen lassen kann Und dabei die Zeilenangaben bekomme. Um die Zeilen daneben in den anderen TextBoxen und einer anderen ComboBox anzeigen zu lassen. Sry ich schreibe nicht oft in Foren, bin nicht so vertraut mit Problembeschreibungen. Vieleicht kann mir jemand helfen. :S PS.: Wie Vormatiere Ich den Code wenn ich ihn hier einfüge, das er nicht so durcheinander ist?

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Stefan“ ()

    Bitte erstmal den Code ordentliche formatieren. Dazu einfach oben beim Editor auf Quellcode wechseln und den Code nochmal copy pasten.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    Stefan schrieb:

    jedesmal eine Ausnahmemeldung
    In welcher Zeile kommt diese Meldung?
    Ist es erforderlich, dass Du alle Excel-Instanzen killst? Vielleicht startest Du mal ohne laufende Excel-Instanz.
    Gib mal bei Google HRESULT 0x800A03EC ein, da sollte was für Dich dabei sein.
    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!
    die Excel instanzen müssen nicht zwagsweise gekillt werden bekomme die Excelanwendung im Taskmanager nicht geschlossen.. ich bekomme diese meldung nur wenn ich das Programm auserhalb von VB starte.
    Meine Ganze Form Sieht so aus. Bitte nicht Lachen :S

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. If ComboBox1.Text = "Kein Produkt ausgewählt" Then
    3. MsgBox("Kein Produkt ausgewählt")
    4. GoTo Ende
    5. End If
    6. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    7. Process.Kill()
    8. Next
    9. Dim objRead As New StreamReader("Path.txt")
    10. Dim lin As String
    11. lin = objRead.ReadLine()
    12. Dim PfadS As String
    13. If CheckBox1.Checked Then
    14. PfadS = ListBox1.SelectedItem
    15. Else
    16. PfadS = (lin & "\" & ComboBox1.Text & "\" & ListBox1.SelectedItem)
    17. End If
    18. Dim XT As New Object
    19. Dim txt_server As String
    20. Dim suche As String = TextBox4.Text
    21. Dim intZähler As Integer
    22. XT = CreateObject("excel.application")
    23. XT.Application.Workbooks.Open(PfadS)
    24. XT.Visible = True
    25. XT.Sheets("Tabelle1").Activate()
    26. XT.Range("A1").Select()
    27. Dim z As Long = XT.Sheets("Tabelle1").UsedRange.Rows.Count
    28. For intZähler = 1 To z Step 1
    29. txt_server = XT.Range("A" & intZähler.ToString).Value()
    30. If suche = txt_server Then
    31. MsgBox(TextBox4.Text & "ist berieits vorhanden.(Yes) Soll der Eintrag ersetzt werden? (No) Soll ein neuer Eintrag mit dem gleichen namen angelegt werden? (Cancel) Abbrechen.", vbYesNoCancel, "Doppelter Eintrag")
    32. If vbYes Then
    33. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    34. Process.Kill()
    35. Next
    36. Dim exclApp As Object 'as Application
    37. Dim Datei As Object 'as WorkBook
    38. Dim Blatt As Object 'as WorkSheet
    39. exclApp = CreateObject("Excel.Application")
    40. With exclApp
    41. .Visible = False
    42. Datei = .Workbooks.Open(PfadS) 'Anpassen
    43. Blatt = Datei.Worksheets("Tabelle1") 'Anpassen
    44. Blatt.Range("A" + intZähler.ToString).Value = TextBox1.Text
    45. Blatt.Range("B" + intZähler.ToString).Value = TextBox2.Text
    46. Blatt.Range("C" + intZähler.ToString).Value = TextBox3.Text
    47. Blatt.Range("D" + intZähler.ToString).Value = TextBox4.Text
    48. 'Alles schliesen
    49. Datei.Save()
    50. Datei.Close()
    51. exclApp.Quit()
    52. End With
    53. ElseIf vbNo Then
    54. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    55. Process.Kill()
    56. Next
    57. Dim xlObj As New Excel.Application
    58. xlObj.Visible = False
    59. Dim Mappe As Excel.Workbook = xlObj.Workbooks.Open(PfadS)
    60. Dim Tabelle As Excel.Worksheet = Mappe.Sheets("Tabelle1")
    61. Dim lngZeile = Tabelle.Cells(Tabelle.Rows.Count, 1).End(-4162).Row + 1 ' -4162 = xlUp
    62. 'In Exeltabelle schreiben, an angegebene Zeile
    63. Tabelle.Cells(lngZeile, 1).Value = TextBox4.Text
    64. Tabelle.Cells(lngZeile, 2).Value = TextBox1.Text
    65. Tabelle.Cells(lngZeile, 3).Value = TextBox2.Text
    66. Tabelle.Cells(lngZeile, 4).Value = TextBox3.Text
    67. 'Alles schliesen
    68. Mappe.Save()
    69. Mappe.Close()
    70. xlObj.Quit()
    71. ElseIf vbCancel Then
    72. GoTo Ende
    73. End If
    74. Else
    75. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    76. Process.Kill()
    77. Next
    78. Dim xlObj As New Excel.Application
    79. xlObj.Visible = False
    80. Dim Mappe As Excel.Workbook = xlObj.Workbooks.Open(PfadS)
    81. Dim Tabelle As Excel.Worksheet = Mappe.Sheets("Tabelle1")
    82. Dim lngZeile = Tabelle.Cells(Tabelle.Rows.Count, 1).End(-4162).Row + 1 ' -4162 = xlUp
    83. 'In Exeltabelle schreiben, an angegebene Zeile
    84. Tabelle.Cells(lngZeile, 1).Value = TextBox4.Text
    85. Tabelle.Cells(lngZeile, 2).Value = TextBox1.Text
    86. Tabelle.Cells(lngZeile, 3).Value = TextBox2.Text
    87. Tabelle.Cells(lngZeile, 4).Value = TextBox3.Text
    88. 'Alles schliesen
    89. Mappe.Save()
    90. Mappe.Close()
    91. xlObj.Quit()
    92. End If
    93. Next
    94. 'Alles schliesen
    95. objRead.Close()
    96. XT.Quit()
    97. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    98. Process.Kill()
    99. Next
    100. Ende:
    101. End Sub


    Ich bekomme die Meldung
    Eine nicht behandelte Ausnahme des Typs "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten.

    Zusätzliche Informationen: Der RPC-Server ist nicht verfügbar. (Ausnahme von HRESULT: 0x800706BA)
    Bei Button 1 in Zeile 81
    Mein Project. mein project

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Stefan“ ()

    Stefan schrieb:

    VB.NET-Quellcode

    1. GoTo Ende
    Mach da bitte ein Return draus.
    GoTo ist ein ganz ganz böser Befehl.
    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!

    Stefan schrieb:

    einböser befehl?
    Du kannst durch Draufsehen nicht (unbedingt) erkennen, wo es hingeht. In der Objektorientierte Programmierung (OOP) ist ein GoTo-Befehl nicht erforderlich, er ist ein Rudiment aus der Steinzeit.
    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!
    :S :) Danke für die Erklärung. Ich glaube ich gehe nochmal zu denn Anfängen zurück. Aber mein Prob. besteht weiterhin. Mit den Google Ergebnissen für (HRESULT: 0x800706BA) und (HRESULT: 0x800A03EC) kann ich nichts Anfangen. Kann mir das jemand Erläutern?Vieleicht hat Jemand einen Vorschlag was ich machen soll. :S

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

    An den Kommentaren 'Anpassen sehe ich, dass der Code von irgendwo kopiert ist. Ok, warum auch nicht. Das Problem dabei: Der, der den Code geschrieben hat, hat selbst keine Erfahrung mit Excel-Interop (so heißt das, was du versuchst). Da werden Objekte in die Landschaft geworfen, ohne sie wieder freizugeben. Normalerweise ist das bei .NET auch nicht nötig, aber in diesem speziellen Fall schon. Das Ergebnis ist dann, dass nach Beenden einer Aktion der Excel-Prozess im Taskmanager gestartet bleibt und hart abgeschossen wird, und zwar mit diesem Konstrukt aus obigem Code:

    VB.NET-Quellcode

    1. For Each Process In System.Diagnostics.Process.GetProcessesByName("EXCEL")
    2. Process.Kill()
    3. Next

    Und das ist schlecht, unsauber und nicht zielführend. Bevor dieser Missstand nicht behoben ist, macht es keinen Sinn, nach dem Grund für irgendwelche Exceptions zu suchen, weil schon das Grundgerüst auf tönernen Füßen steht.

    Genug der Aufregung. Nichts gegen dich, wirklich. Da die Frage nach Excel-Interop in regelmäßigen Abständen auftritt, poste ich die Lösung nicht schon wieder. Hier ein paar Threads mit Antworten von mir:
    [VB 2010] Aktives Excel Dokument lesen
    [Excel] Von VB.NET über COM auf Excel zugreifen
    [VB 2010] Excel Prozess nach Schreiben in Exceldatei beenden <-- wichtig für dich!

    Das ist die andere Richtung (.NET nach Excel):
    [VB 2012] COM-Klasse lässt keine Properties zu?
    Gruß
    hal2000
    Ok, hast ja recht ich versuche es nochmal von vorne. Manchmal einfach neu anfangen. :)
    Danke für die links. Ich werde mein bestes versuchen um mein Projekt erneut auf zu bauen und fertig zu stellen.
    Ich hoffe das mir hier bei evtuelen Problemen die auftauchen können geholfen wird.
    Danke nochmal. :thumbsup: