Bei ListBox Sel.Ind.Ch. Excel schliesen.

  • VB.NET

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

    Bei ListBox Sel.Ind.Ch. Excel schliesen.

    Hi,
    ich weiss die überschrift ist nicht die Ware. Sry. Ich lasse mir ExcelDateien (xlsx) in einer ListBox auflisten und bei einer Auswahl deren Spalte A in ComboBox2 und Spalte D in ComboBox3 auflisten. Funktioniert Soweit. Mein Problem: ich möchte das wenn ich in der ListBox eine andere ExcelDatei auswähle die alte geschlossen wird? Ich sehe immer im Taskmanager eine neue Excel Anwendung. Wie kann ich das bewerkstelligen? ?(

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    2. ComboBox2.Items.Clear()
    3. ComboBox3.Items.Clear()
    4. Dim xlApp As Excel.Application
    5. Dim xlBlatt As Excel.Worksheet
    6. Dim xlMappe As Excel.Workbook
    7. Dim xlRangeA As Excel.Range
    8. Dim xlRangeD As Excel.Range
    9. xlApp = New Excel.Application
    10. xlApp.Visible = False 'Zum Testen ob xlApp geschlossen wird ( Ja es wird geschlossen)
    11. xlMappe = xlApp.Workbooks.Open(PfadS)
    12. xlBlatt = xlMappe.Worksheets("Tabelle1")
    13. Dim z As Long = xlApp.Sheets("Tabelle1").UsedRange.Rows.Count
    14. For i As Integer = 2 To z Step 1
    15. xlRangeA = xlApp.Range("A" + i.ToString)
    16. xlRangeD = xlApp.Range("D" + i.ToString)
    17. For Each Cell In xlRangeA
    18. If Not Cell.Text = "" Then
    19. ComboBox2.Items.Add(Cell.Text)
    20. End If
    21. For Each Celle In xlRangeD
    22. If Not Celle.Text = "" Then
    23. ComboBox3.Items.Add(Celle.Text)
    24. End If
    25. Next
    26. Next
    27. Next
    28. 'Alles schliesen
    29. xlBlatt.Close()
    30. xlMappe.Close()
    31. xlApp.Application.Quit()


    Vieleicht hat ja auch jemand eine Idee wie ich das noch vereinfachen kann. Ist schon Spät :S
    PS. Es kommen Leere zeilen in der ExcelTabelle vor.
    Autsch. Tatsächlich hätte man das noch verkürzen können, aber wenn es funktioniert...
    Sowas kannst du mit Prozessen bewerkstelligen. Also das beim klicken auf ein anderes Item der Prozess exel.exe schließt. Kannst natürlich auch eine batch Datei erstellen und immer aufrufen, wenn du mit Prozessen Probleme hast.
    Thema prozess:
    Du erstellst einen Prozess und schließt ihn mit Process.Kill()

    z.B.:

    VB.NET-Quellcode

    1. Dim prozess as Process = Process.GetProcessByName("excel")
    2. prozess.kill()


    Aber kein .exe dahinter!

    Greetz,
    danke, bekomme aber Fehler angezeigt "GetProcessByName ist kein Member von System.Diagnostics.Process". Ich weiss langer txt. Aber Ich bin noch nicht lange in VB. und bin für jeden verbesserungs vorschlag offen.
    Wenn ich den Prozess kille werden alle Excel prozesse gekillt. und wenn jemand noch eine Excel Datei offen hat die nichts mit dem Programm zu tun hat. wäre diese möglichkeit eher negativ? Oder gibt es eine möglichkeit herraus zu filtern welcher prozess von dem programm kommt? Vieleicht kann mir ja jemand helfen den Code zu verkürzen, verbessern. :huh:

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