Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Problem mit Makro





Frage

Hallo liebe Forengemeinde, ich habe folgendes Problem: Ich möchte Daten aus 2 (teilweise auch mehr) verschiedenen Exceldateien in einer 3. Tabelle zusammenfassen (mittels eine Befehlsschaltfläche). Dieser Vorgang wiederholt sich ständig, so das die Zieldatei ständig wächst. Ich habe ein Makro aufgezeichnet und es der Befehlsschaltfläche zugeordnet. Das Makro sieht folgendermaßen aus: Sub Schaltfläche2_BeiKlick() ActiveWindow.ActivateNext Range("A1:J55").Select Selection.Copy ActiveWindow.ActivateNext ActiveWindow.ActivateNext Sheets("GPO 2007").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.End(xlDown).Select Selection.End(xlUp).Select [b]Range("K1241").Select[/b] ActiveCell.FormulaR1C1 = "Ende" [b]Range("A1242").Select[/b] ActiveWindow.ActivateNext ActiveWindow.ActivateNext Range("A1:J55").Select Selection.Copy ActiveWindow.ActivateNext ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.End(xlDown).Select Selection.End(xlUp).Select [b]Range("K1248").Select[/b] ActiveCell.FormulaR1C1 = "Ende" [b]Range("A1249").Select[/b] End Sub Mein Problem: Die einzulesenden Dateien sind immer unterschiedlich groß von der Zeilenanzahl. Deswegen habe ich den Befehl "Strg + Pfeiltaste down" benutzt, um an das Ende der Tabelle zu gelangen damit die Daten dernachfolgenden Datei direkt darunter eingefügt werden. Excel erkennt diesen Befehl aber nicht sondern setzt die Zellposition fest im Code ein (siehe Fettschrift im Makro). Was muss ich tun, damit Excel immer genau eine Zelle unter der zuletzt beschrifteten Zelle geht? Vielen Dank schon mal im voraus!! Gruß Thorsten

Antwort 1 von Beverly

Hi Thorsten,

die letzte belegte Zelle in Spalte A kann man mit diesem Code ermitteln

 IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)


In deinem Code müsste das dann für die 1. freie Zelle in Spalte K heißen Range("K" & IIf(IsEmpty(Cells(Rows.Count, 11)), Cells(Rows.Count, 11).End(xlUp).Row, Rows.Count + 1).

In VBA kann zu 99% auf Select und Activate verzichtet werden. z.B.

 Range("A1:J55").Select
Selection.Copy


kannt du vereinfachen zu

 Range("A1:J55").Copy


Oder

Range("K1248").Select
ActiveCell.FormulaR1C1 = "Ende"


wird zu

Range("K1248") = "Ende"


Bis später,
Karin

Antwort 2 von Bandog29

Hallo Karin,

vielen dank für die Antwort!

Wo genau muss denn der Code durch deine Änderungen ersetzt werden?

Kannst du vielleicht mein Beispiel nehmen und es so abändern das es funktioniert? In VBA bin ich leider nicht wirklich ein Experte.

Vielen Dank für deine Mühe!

Viele Grüße
Thorsten

Antwort 3 von Beverly

Hi Thorsten,

wenn ich dein Vorhaben richtig verstanden habe, dann sollte es auf diese Weise funktionieren

Sub Schaltfläche2_BeiKlick()
    Dim wbMappe As Workbook
    Dim wsTabelle As Worksheet
    Dim loLetzte As Long
    Set wsTabelle = ThisWorkbook.Worksheets("GPO 2007")
    loLetzte = IIf(IsEmpty(wsTabelle.Cells(Rows.Count, 1)), wsTabelle.Cells(wsTabelle.Rows.Count, 1).End(xlUp).Row, wsTabelle.Rows.Count)
    For Each wbMappe In Excel.Workbooks
        If wbMappe.Name <> ThisWorkbook.Name And wbMappe.Name <> "PERSONL.XLS" Then
            With wbMappe.Worksheets("Tabelle1") '<== hier den Namen der Tabelle anpassen, aus der kopiert wird
                .Range("A1:J55").Copy wsTabelle.Cells(loLetzte + 1, 1)
                loLetzte = IIf(IsEmpty(wsTabelle.Cells(Rows.Count, 1)), wsTabelle.Cells(wsTabelle.Rows.Count, 1).End(xlUp).Row, wsTabelle.Rows.Count)
                wsTabelle.Cells(loLetzte, 11) = "Ende"
            End With
        End If
    Next wbMappe
End Sub


Wenn du außer den Mappen, aus denen kopiert werden soll noch andere geöffnet hast, musst du in der fett markieren Zeile alle Namen dieser Mappen nach demselben Prinzip aufführen bzw. ergänzen, aus denen nicht kopiert werden darf. ThisWorkbook ist die Mappe mit dem Code, also in die kopiert werden soll. Da es auf den meisten Rechnern eine PERSONL.XLS gibt, habe ich diese gleich mit aufgeführt.

Der Code geht davon aus, dass in Spalte A Zelle A55 immer ausgefüllt ist.

Bis später,
Karin

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: