Excel Makro: Automatisches Erkennen und kopieren?

...komplette Frage anzeigen

2 Antworten

Da fehlt die eigentliche Frage, oder?

Ich rate also etwas: Das Makro in der bisherigen Form wird so nicht funktionieren (aber trotzdem Daumen hoch, dass Du Dich nicht von VBA / Makro abschrecken lässt!)

das int brauchst Du nicht, Du definierst ja den Anfangswert von cords als Ganzzahl und erhöhst um Ganzzahlen.

Beim Wechsel zwischen Dateien solltest Du meiner Erfahrung nach mit konkreten Dateinamen arbeiten und activeworkbook oder activesheet vermeiden, das kann zu Fehlern führen, wenn gerade nicht das vorgehene Blatt bzw. die Datei aktiv sind.

bei den Angaben mit cells ist die Reihenfolge anders als bei normalen Formeln, also erst die Zeile (rows) dann die Spalte (columns). Das war in Deinem Entwurf teilw. verdreht.

Statt select und selection.copy bzw. den gleichen Weg für das Paste kannst Du das direkt in einen Befehl packen. Der Makrorekorder zeichnet da sehr "wörtlich" auf, indem die Markierung mit der Maus als select getrennt erfasst wird.

In der Do/While fragst Du auf die Bedingung ab, dass die Zelle leer ist - der formulierten Frage nach soll aber bis zu einer leeren Zeile gesucht werden, d.h. es muss hochgezählt werden solange eben die aktuelle Zeile nicht leer ist.

Zwei Fragen bleiben für mich aber noch offen:
- Warum erfolgt noch ein cords=cords+1? Soll der ganze Ablauf (Suche nach der leeren Zeile, Kopieren/Einfügen) noch einmal wiederholt werden?

- Wohin genau soll das kopierte Ergebnis eingefügt werden? Direkt ab A1 oder in der Zieldatei erstmal die leere Zeile suchen?

Mappe1 ist beim Beispiel die Quelldatei
Mappe4 das Ziel

Wenn Fehlermeldungen wegen Index überschritten kommen, stimmt etwas mti den Dateinamen/Pfaden oder Tabellenbezeichnungen noch nicht. Das müssten wir dann noch rausfummeln.

Dim Cords As Integer
Cords = 12
Do While Workbooks("Mappe1.xlsx").Sheets("Tabelle1").Cells(Cords, 1) <> ""
Cords = Cords + 1
Loop
Workbooks("Mappe1.xlsx").Sheets("Tabelle1").Range(Cells(12, 1), Cells(Cords, 9)).Copy Destination:=Workbooks("Mappe4.xlsx").Worksheets("Tabelle1").Cells(1, 1)
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DarkxAxngel
10.08.2016, 15:06

Hallo danke für diese tolle Antwort! (:

das Cords+1 sollte dienen das eine Zeile von Links nach rechts frei wird. Dannach sollte er sich unterhalb der gefüllten Daten befinden und von dort aus die Daten einfach drunter kopieren.

Später soll es so sein, dass ich einfach eine Hauptmappe angebe und in den Nebenmappen das Makro ausführe. So dass die daten unter einander am ende in der Hauptmappe befinden.

Und noch mal zu verständigigung bei meinen Dreher cells(12,A) wäre richtig und nicht (A,12) ?

0

Uiuiuiui, da ist einiges sehr gewöhnungsbedürftig. 12 ist bereits ein ganzzahliger Wert. Du musst ihn nicht noch mit Int casten.

Cells(1, Cords) fängt bei Zeile 1, Spalte 12 an. Ich denke, hier hast du einen Dreher.

Ich würde das so machen:

Sub Kopieren()
  Dim bLeer As Boolean
  Dim i As Integer
  Dim iZeile As Integer
  Dim iSpalte As Integer

iZeile = 12 While Cells(iZeile, 1) <> "" iZeile = iZeile + 1 Wend iZeile = iZeile - 1
iSpalte = 2 bLeer = False While Not bLeer bLeer = True For i = 12 To iZeile If Cells(i, iSpalte).Value <> "" Then _ bLeer = False Next iSpalte = iSpalte + 1 Wend iSpalte = iSpalte - 1
Range(Cells(12, 1), Cells(iZeile, 1)).Copy Cells(12, iSpalte) End Sub

Anstelle der For-Schleife kannst du auch schreiben:

bLeer = WorksheetFunction.CountA(Range(Cells(12, iSpalte), Cells(iZeile, iSpalte))) = 0
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DarkxAxngel
10.08.2016, 15:14

Ich hab mal deins Reingehauen als Script , leider ohne erfolg x.x

0

Was möchtest Du wissen?