2 Excel zusammenfügen / Merge Kopfzeile soll verschwinden

  • VB.NET

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

    2 Excel zusammenfügen / Merge Kopfzeile soll verschwinden

    Paradisische Grüße,

    mir gelingt es nicht 2 Excel-Tabellen zusammen zu führen.
    Dabei soll es dazu kommen, dass die Kopfzeile der 2. Excel nicht beachtet wird.
    Kann es sein, dass sich jemand damit auskennt und mir helfen möchte?
    Ich arbeite im Visual Studio.
    Bisher wurde mir hier sehr gut geholfen, daher möchte ich nochmal um Rat bitten.
    Die erste Liste die oben stehen soll heißt Liste1 und die zweite heißt Liste2.


    -> Bin nämlich noch Neuling.

    Vielen Dank schonma. 8-)

    Themen zusammengefügt ~VaporiZed
    <Insert funny signature here>

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


    Selten so viele Widersprüche auf einmal entdeckt.
    Daher bitte klären: In welcher Umgebungsentwicklung bist Du unterwegs?
    • Office (z.B. im Excel-VB-Code, also VBA)
    • Visual Studio (VB.NET)
    • Visual Studio Code
    • in einer VBS-Datei (VBScript)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ok, Du hast also 2 Exceltabellen? Oder 2 Excel-Spalten? Wie sehen diese beispielweise einzeln aus, wie sehen sie gemergt aus, wie sollen sie gemergt aussehen? Bilder kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    2 gleich aufgebaute Exceltabellen die fortlaufend zusammengefügt werden sollten.
    Ich habe leider etwas nicht gerafft, nämlich WIE ich sie merge mittels einem Code.
    Sie haben alle die selbe Kopfzeile nämlich zb Name Alter Adresse Herkunft
    Es soll aber dann am Ende

    Name Alter Adresse Herkunft
    Inhalt Liste1 (bei der Name Alter Adresse Herkunft oben schon steht)
    Inhalt Liste2 (hier steht auch normalerweise schon die Kopfzeile, hier sollte sie aber weg)
    damit das eine fortlaufende Tabelle wird.

    Bilder habe ich grad keine da.
    <Insert funny signature here>
    Also geht es nur darum, eine Tabelle mit ein paar festgelegten Überschriften zu haben, aber die echten Daten sollen erstmal von Tabelle 1 hergenommen werden und dann die von Tabelle 2 hinzugefügt werden? Ok, das ist vergleichsweise einfach. Was hast Du bisher an Code?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also mein Code sieht bisher so aus:


    VB.NET-Quellcode

    1. Namespace MyExcel2
    2. Class Merge
    3. Private Shared Sub Main(args As String())
    4. Dim newbook As New Workbook()
    5. Dim tempbook As New Workbook()
    6. Dim excelFiles As String() = New String() {"Liste1.xlsx", "Liste2.xlsx"}
    7. For i As Integer = 0 To excelFiles.Length - 1
    8. tempbook.LoadFromFile(excelFiles(i))
    9. For Each sheet As Workspace In tempbook.Worksheets
    10. newbook.Worksheets.AddCopy(sheet)
    11. Next
    12. Next
    13. newbook.SaveToFile("liste1undliste2.xlsx")
    14. End Sub
    15. End Class
    16. End Namespace


    Kriege es aber nicht hin, brauche ich spire.xls oder geht das ohne?

    CodeTags korrigiert ~VaporiZed
    <Insert funny signature here>

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VaporiZed“ ()

    Ein anderen Code den ich gefunden habe, wäre folgender..


    VB.NET-Quellcode

    1. Private Sub Merge()
    2. Dim xlApp As Excel.Application
    3. Dim wb1 As Excel.Workbook
    4. Dim wb As Excel.Workbook
    5. Dim sNewFullName As String
    6. Dim sFullName(1 To 2) As String
    7. Dim i As Integer
    8. sFullName(1) = "Liste1.xlsx"
    9. sFullName(2) = "Liste2.xlsx"
    10. sNewFullName = "Liste1undListe2.xlsx"
    11. xlApp = New Excel.Application
    12. wb1 = xlApp.Workbooks.Open(sFullName(1))
    13. For i = 2 To 2
    14. wb = xlApp.Workbooks.Open(sFullName(1))
    15. wb.Sheets(1).Copy After:=wb1.Sheets(wb1.Sheets.Count)
    16. wb.Close False
    17. Next
    18. wb = Nothing
    19. wb1.SaveAs(sNewFullName)
    20. wb1.Close()
    21. wb1 = Nothing
    22. xlApp.Quit()
    23. xlApp = Nothing
    24. End Sub


    CodeTags korrigiert ~VaporiZed
    <Insert funny signature here>

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

    Engelchen schrieb:

    brauche ich spire.xls
    Wo taucht bei dir im Code Spire.xls auf?
    Welches Ergebnis erbringen denn die beiden Codes? Und inwieweit weichen die Ergebnisse vom Sollwert ab?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Gar nichts bisher, spire hab ich unter Googles Recherche gefunden, aber keine Verwendung für.

    Bei dem ersten Code tut sich nichts und es kommen nur Fehler, daher habe ich den zweiten Code geschrieben...

    Beim zweiten gibt es einen Fehler bei der Zeile.

    wb.Sheets(1).Copy After:=wb1.Sheets(wb1.Sheets.Count)

    Das erkennt er nicht an.

    Ich verstehe halt nicht ob ich das zu kompliziert sehe oder ob es eine viel einfachere Lösung gibt um 2 Excel tabellen miteinander zu fusionieren.
    Und bei dem Aspekt "lösche mir die kopfzeile der Liste2" stehe ich auch noch da wie ein nasser Sack.
    <Insert funny signature here>

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

    Leider hattest Du noch nicht gesagt, ob meine Zielvermutung in Post#6 korrekt ist. Aber falls ja, musst Du
    • Tabelle 1 öffnen
    • das Ende der Tabelle finden (z.B. indem Du schaust, in welcher Zeile keine Daten mehr stehen) = Position X
    • Tabelle 2 öffnen
    • die benötigten Daten von Tabelle 2 in Tabelle 1 ab Position X reinschreiben
    • ggf. speichern
    Was davon bekommst Du (nicht) hin?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe bereits ein Skript, welches per Klick ein paar Sachen ausführt, ich möchte aber dass bevor er diese Sachen ausführt ein Merge stattfindet zwischen zwei Exceltabellen.
    Kannst du mir da sagen wie das gehen soll?


    Die Tabellen sind immer unterschiedlich groß, tut mir leid wegen dem Post #6 Genauso wie du es beschrieben hast, soll es passieren.
    Ich weiß nicht wie man den Code schreiben soll um ehrlich zu sein.

    Bekomme alles davon nicht hin.

    Ich hätte jetz noch einen dritten Code wollte aber erst mal wissen mit welchem ich anfangen sollte.

    <Insert funny signature here>

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

    Klar, hab ich ja gepostet, welche Schritte Du durchführen musst. Aber die Frage, was Du davon (nicht) hinbekommst, hast Du unbeantwortet gelassen …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich bekomme es nicht hin den Code zu schreiben, dass ich am Ende Die Exe ausführen kann, sodass mir die 2 Exceltabellen gemerget erscheinen und ich auf die obere Kopfzeile der zweiten Tabelle verzichten kann.
    ich weiß leider nicht wo ich anfangen soll.
    Das ist mein Problem.
    <Insert funny signature here>
    Das Vorgehen ist immer
    1. Ziel wählen
    2. Schritte planen
    3. jeden Schritt in die Tat umsetzen
    Punkt 1 hast Du.
    Zu Punkt 2 schreibst Du

    Engelchen schrieb:

    ich weiß leider nicht wo ich anfangen soll.
    Das ist doppelt schlecht. Doppelt deshalb, weil ich bereits das für Dich erledigt habe, siehe Post#11. Aber Du hast immer noch nicht gesagt, bei welchem der Punkte Du Schritt 3 umsetzen kannst und bei welchem nicht. Und daher werd ich nicht weiterhelfen können, denn ich bin gerade nicht in der zeitlichen Verfassung, Dir ne Komplettlösung zu schreiben. Da brauch ich schon Engagement von Dir.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Kopieren des Textes in die erste freie Zeile einer Exceltabelle

    Spoiler anzeigen

    Visual Basic-Quellcode

    1. Dim MyExcel As New Microsoft.Office.Interop.Excel.Application
    2. MyExcel.Visible = True
    3. Dim wk1, wk2 As Workbook
    4. Dim row1, row2 As Integer
    5. Dim path1, path2 As String
    6. Dim lRow As Long
    7. Dim rng As Range
    8. path1 = "\\Liste1.xlsx"
    9. path2 = "\\Liste2.xlsx"
    10. wk1 = MyExcel.Workbooks.Open(path1)
    11. wk2 = MyExcel.Workbooks.Open(path2)
    12. MyExcel.Visible = True
    13. row1 = wk1.Sheets(1).Cells(wk1.Sheets(1).Rows.Count, 1).End(-4162).Row
    14. row2 = wk2.Sheets(1).Cells(wk2.Sheets(1).Rows.Count, 1).End(-4162).Row + 1
    15. wk1.Sheets(1).Rows("2:" & row1).Copy


    Hab das bisher, welches mir alles auswählt ausser die erste Zeile, möchte aber jetzt diesen Text kopiert ins wk2 bekommen, welches ganz unten angefügt werden soll, hat da jemand einen Plan?

    CodeTags korrigiert
    eigenständigen Thread an dieser Stelle angefügt ~VaporiZed

    <Insert funny signature here>

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

    Ah, ich sehe, Du hast das Problem doch aus eigener Kraft weiterbearbeiten können. Freut mich. Daher werd ich wohl dieses Thema mit dem alten zusammenfügen.* Dann kann es ja jetzt weitergehen.
    Wenn Du den Makrorecorder in Excel anwirfst und die Schritte durchgehst, die Du machen willst, wird Dir fertiger, aber noch nicht zwangsläufig guter Code erzeugt. Aber es ist ein guter Anhaltspunkt.
    Ein Beispiel:

    Visual Basic-Quellcode

    1. Range("A10").Select
    2. ActiveSheet.Paste
    3. Application.CutCopyMode = False

    Mehr ist es nicht. Zielort festlegen, ActiveSheet.Paste ausführen, Kopiermodus beenden.
    Warum ist der Makrorecordercode nicht so gut? Weil er in Zeile#1 eine Absolutangabe (A10) und und Zeile#2 eine Relativangabe (ActiveSheet) macht.
    Die Absolutangabe musst Du durch Deine Zielkoordianten ersetzen. Die wk2.Row hast Du ja schon (row2). Nur noch die Zielspalte musst Du selber festlegen (ich vermute Spalte 1, aber Du kennst Deine Tabellen besser) und dann dahin navigieren und schon ist das erste Problem gelöst: wk2.Sheets(1).Cells(row2, Zielspaltenindex).Select
    Das zweite ist die Ersetzung von ActiveSheet. Auch einfach: Du hast ja schon wk2 als Workbook. Und Du weißt auch, dass es in die 1. Tabelle gehen soll. Also ist das Ziel wk2.Sheets(1).
    Damit sollte alles erledigt sein. Oder?

    * Themenzusammenfügung erledigt
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    ActiveSheet.Paste
    bringt mir das ja in die akitve Sheet, wie bekomme ich ein Sheet aktiv?
    Normalerweise würde ich ja gerne das Ding einfach nur invisible laufen lassen, war jetzt nur für Testzwecke.
    wk2 sollte benutzt werden.

    wk2.ActiveSheet.Paste ?
    <Insert funny signature here>
    Mach doch auch hier eine Absolutangabe: wk2.Sheets(1).Paste
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.