Makro: nächste freie Zeile suchen/Werte eintragen

Hallo Excelperten,

ich suche ein Makro, das folgende Funktion durchführt.

Suche in datei C:\abc.xls die nächste freie Zeile und trage den Wert aus C1 der aktuellen Tabelle in die Spalte A der Datei abc.xls. (nächste freie Zeile.

Danke für Eure Hilfe
Florian

Hallo,

Zuerst suchst du dir ne freie Zelle in dem Blatt, von dem du kopierst. Ich nehme jetzt A1. dort schrebst du folgende Formel rein:

="A"&ZÄHLENWENN('C:\[bla.xls]Tabelle1'!A:A;"")+1

Eventuell hast du nen Fehlerwert drin; sobald die Mappe geöffnet wird steht der korrekte Wert drin.

ich gehe davon aus, daß in der Zieldatei die komplette A-Spalte verwendet werden soll, also A:A. Kannst du ggf. anpassen. Je nach Startzeile mußt du dann auch die +1 am Ende anpassen.

Die Funktion zählt also im angegebenen Bereich alle nichtleeren Zellen, setzt ein „A“ davor und zählt 1 dazu. Das heißt wenn bereits 10 Listeneinträge existieren, schreibt er A11.

Nun erstellst du ein Makro in derselben Mappe:

Sub Schaltfläche2\_BeiKlick()
 Dim Wb As Workbook

' Zieldatei öffnen
 Set Wb = Workbooks.Open("C:\Bla.xls")

' Kopiere aus DIESER Mappe, aus dem Blatt "Tabelle1" die Zelle C1
' in die geöffnete Mappe, ins Blatt "Tabelle1", in die Zelle, die
' in DIESER Mappe, Blatt "Tabelle1", in Zelle A1 steht.
 ThisWorkbook.Sheets("Tabelle1").Range("C1").Copy \_
 Destination:=Wb.Sheets("Tabelle1").Range \_
 (ThisWorkbook.Sheets("Tabelle1").Range("A1"))

' Mappe wieder schließen, Änderungen speichern. 
 Wb.Close savechanges:=True

End Sub

LG

Hallo,

danke für die Antwort. Hab es jetzt jedoch folgendermaßen gelöst:

Die Daten aus dem Formualar habe ich auf bestimmte Zellen kopiert.

Sub DatenExportieren()

Const LW = „C:“
Const Pfad = „C:\temp“
Const Datei = „Datei.xls“

ChDrive LW
ChDir Pfad

On Error Resume Next

'kopiert die benötigten Daten abgespeichert in M4:V42
Range(„A1“).Select
ActiveCell.Offset(41, 12).Range(„A1:J1“).Select
Selection.Copy
'öffnet oben angegeben Datei
Workbooks.Open Datei
'suche in der ersten Spalte die erste freie Zelle
Loletzte = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(Loletzte, 1).Select
'kopiere Daten in die Zeile
ActiveCell.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'hier wären folgende zwei Befehle noch möglich
'save datei
'close datei
'jedoch soll der Benutzer sehen, was gemacht wird

On Error GoTo 0
End Sub

Hallo Florian,

Const LW = „C:“
Const Pfad = „C:\temp“
Const Datei = „Datei.xls“
ChDrive LW
ChDir Pfad

zunächst mal, an sich nicht wichtig, aber ist so ChDrive braucht nur einen Buchstaben, also ungewohnterweise ohne Doppelpunkt. Aber macht nix, ChDrive wertet nur das erste Zeichen aus.

Manchmal macht es Sinn oben im Code „Const“ zu benutzen um den Code leicht und schnell an andere Umgebungen anzupassen, hier halte ich das nicht für nötig, m.E. reicht hier:

ChDrive „C“
ChDir „C:\temp“

On Error Resume Next

Warum, welchen Fehler erwartest du?
Besser ist unten am Code einzubauen:

Exit Sub
Fehler:
If Err.number 0 then …
oder
If Err.Number=1024 then …

Und oben im Code halt
On Error Goto Fehler

Aber sowas hängt stark vom Einzelfall ab, also welche Fehler erwartet werden.

Range(„A1“).Select
ActiveCell.Offset(41, 12).Range(„A1:J1“).Select
Selection.Copy

Das könntest du auch so schreiben:

Range(„M42:V42“).Copy

'öffnet oben angegeben Datei
Workbooks.Open Datei

? Wo ist da der Pfad geblieben?
Workbooks.Open Pfad & „“ & Datei

Loletzte = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(Loletzte, 1).Select
ActiveCell.Select

Was soll das doppelte Select?

Selection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Teste mal

Cells(Loletzte, 1).PasteSpecial …

Bei Paste und pasteSpecial irre mich mich oft was die Referenzierung angeht, die haben nicht meine Logik :smile:)

'jedoch soll der Benutzer sehen, was gemacht wird

? ist das jetzt eine Frage?

On Error GoTo 0

Kannste dir sparen als letzte Zeile im Code.

Gruß
Reinhard