2 Excel zusammenfügen / Merge Kopfzeile soll verschwinden

  • VB.NET

Es gibt 51 Antworten in diesem Thema. Der letzte Beitrag () ist von Engelchen.

    Hallo nochmal ich habe folgende Frage, beim Skript, das vorher funktioniert hatte, taucht jetzt ein Fehler auf?

    Hat das mit den Makros was zu tun?

    Admin modus schon ausprobiert, hat nicht geholfen.
    Danke für die Hilfe

    System.Runtime.InteropServices.COMException:
    "Das aufgerufene Objekt wurde von den Clients getrennt. (Ausnahme von
    HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"

    <Insert funny signature here>

    Visual Basic-Quellcode

    1. Imports Microsoft.Office.Interop.Excel
    2. Class MainWindow
    3. Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    4. Dim MyExcel As New Microsoft.Office.Interop.Excel.Application
    5. MyExcel.Visible = True
    6. Dim wk1, wk2 As Workbook
    7. Dim path1, path2, path3 As String
    8. path1 = "\\xx"
    9. path2 = "\\xxx"
    10. path3 = "\\xxxx"
    11. wk1 = MyExcel.Workbooks.Open(path1)
    12. wk2 = MyExcel.Workbooks.Open(path2)
    13. ' Dim ws1 = wk1.Sheets(1)
    14. 'ws1.Range("F:F").Replace(("_*"), "")
    15. wk1.Unprotect()
    16. wk2.Unprotect()
    17. Dim Row1 = wk1.Sheets(1).Cells(wk1.Sheets(1).Rows.Count, 1).End(-4162).Row
    18. Dim Row2 = wk2.Sheets(1).Cells(wk2.Sheets(1).Rows.Count, 1).End(-4162).Row + 1
    19. Dim Rng1 = MyExcel.Intersect(wk1.Sheets(1).UsedRange, wk1.Sheets(1).Range("2:" & Row1))
    20. Dim Rng2 = wk2.Sheets(1).Range("A" & Row2).ReSize(Rng1.Rows.Count, Rng1.Columns.Count)
    21. Rng2.Value = Rng1.Value
    22. wk1.Close(SaveChanges:=False)
    23. wk2.SaveAs(path3)
    24. wk2.Close()
    25. Dim ws = wk2.Sheets(1)
    26. Dim StartDatum As String
    27. Dim EndDatum As String
    28. StartDatum = InputBox("Start-Datum:", "Eingabe", Format(Now, "YYYYMMDD"))
    29. EndDatum = InputBox("End-Datum:", "Eingabe", Format(Now, "YYYYMMDD"))
    30. ws.Range("D:D").Replace(("Startdatum im Format JJJJMMTT"), StartDatum)
    31. ws.Range("E:E").Replace(("Enddatum im Format JJJJMMTT"), EndDatum)
    32. ws.Range("A:AZ").Replace(("Keine Eintragung..."), "")
    33. ws.Range("A:AZ").Replace(("Keine Ei"), "")
    34. ws.Range("F:F").Replace(("_*"), "")
    35. ws.Range("F:F").Replace(("-*"), "") '
    36. ws.Range("A:AZ").Replace(("Keine OP"), "")
    37. ws.SaveAs($"\\xxx213_{StartDatum}_{EndDatum}.xlsx")
    38. End Sub
    39. End Class



    Bei Dim ws = wk2.Sheets(1)
    Zeile 29
    <Insert funny signature here>

    Engelchen schrieb:

    Dim ws = wk2.Sheets(1)


    Mach da mal dies draus:

    VB.NET-Quellcode

    1. Dim ws as Worksheet= wk2.Sheets(1)


    Generell solltest Du Variablen auch mit einer expliziten Deklaration versehen.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Engelchen schrieb:

    wk2.Close()
    Dim ws = wk2.Sheets(1)
    Naja, wenn du das Workbook schließt, brauchst du dich nicht zu wundern, wenn die darin enthaltenen Worksheets nicht mehr ansprechbar sind.

    Edit: OK, too late, wurde in Post #47 schon angesprochen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Leider ist die Datenabfragemaske nicht im Vordergrund, gibt es hierzu ein simplen Trick oder so?
    Ich glaube es liegt daran, dass die wk2.SaveAs(path3) nicht silent, also nicht automatisch agiert.
    Es wird nämlich bevor ich die Datenabfragemaske sehen kann, dieser Dialog erfragt - ob ich es speichern will.

    Mit wk2.SaveAs(path3, SaveChanges:=True) Scheint es nicht zu funktionieren.
    Hat da jemand einen Rat?


    Und weiß einer vielleicht wie ich bei der Replace Funktion ws1.Range("AB:AB").Replace(("N"), "") Das N Case sensitive mache?

    Er löscht leider auch ein Wort mit einem Buchstaben N ich möchte aber leider nur das großgeschriebene, einzeln stehende N gelöscht haben.
    <Insert funny signature here>

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

    Engelchen schrieb:

    Ich glaube es liegt daran, dass die wk2.SaveAs(path3) nicht silent
    Setze vor dem Speichern ​MyExcel.DisplayAlerts = False und danach wieder auf True.

    Engelchen schrieb:

    Das N Case sensitive mache?
    Replace hat einen Parameter MatchCase.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Danke habs gelöst bekommen.

    Quellcode

    1. ws.Range("F:F").Replace(("-*"), "")

    Das habe ich jetzt mal auskommentiert.

    Wie kann ich da dann bei der Zeile ein Prompt erstellen, in dem drin steht achtung bei dem namen "Random1" soll was manuell editiert werden. (STRG+F "Random1" verweist dann auf die zeile.

    Nochmal zum Verständnis:
    Wie schaffe ich es, dass dann bei der Zeile die ich jetzt auskommentiert habe anstatt der Replace funktion eine Find funktion "mit dem artikel random1" gesucht wird, er zu der zelle springt und zwei mal nach rechts oder dort bleibt ist egal und dann einmal ein prompt erscheint mit dem Titel "random2".
    Danke!

    Edit: das muss aber nicht sein, du hast mir schon genug geholfen!
    Ich bedanke mich für die professionelle Hilfe, das Angebot auf der Seite und die tolle Community.
    Ich würde die Seite definitiv jedem weiterempfehlen, der Probleme hat mit VB-Skripting.
    Danke an euch alle!
    <Insert funny signature here>

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