Wie kopiert Excel in VBA eine Zeile in ein anderes Tabellenblatt in die NÄCHSTE LEERE ZEILE?
Hi,
ich habe eine Frage zu Excel VBA!
Da ich mich nicht besonders gut auskenne, werde ich ein Makro erstellen welches die ganze Zeile einfach in ein anderes Tabellenblatt kopiert. Dieses Makro möchte ich dann so ändern, dass die kopierte Zeile im anderen Tabellenblatt, in dem sie eingefügt werden soll, in die nächste LEERE Zeile eingefügt wird. Könnt ihr mir bitte schreiben, wie dieser Befehl heißt, bzw. was ich machen muss?
Und noch eine Frage:
Kann man Makros via Wenn-Funktion ansprechen, wenn ja, wie?
Danke für die Antworten schon im Voraus!
2 Antworten
Hey, also um in dein Makro die nächste freie Zeile im anderen Tabellenblatt zu suchen, kannst du diesen Code in dein Makro mit einbauen:
Eigentlich müsste in deinem Code jetzt irgendwo folgendes stehen:
Selection.Copy
Sheets("deine Tabelle wo es rein soll").Select
Danach folgen Code einfügen:
leereZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
Range("A" & leereZeile & ":A" & leereZeile).Select
Dann sollte bei dir wieder folgendes kommen:
ActiveSheet.Paste
Das ganze bewirkt das in deiner Tabelle wo die Daten rein sollen, in Spalte A die nächste freie Zeile gesucht wird und diese dann makiert wird. Alles andere passiert durch dein Makro.
Zum zweiten Teil deiner Frage:
Du kannst mit einer Wenn Abfrage kein Makro direkt starten, dazu musst du den Umweg über eine Funktion gehen.
Dafür musst du aber erstmal eine Funktion anlegen welche sich wenn die Bedingung erfüllt diese auslöst und dann steht in dieser Funktion dein Makroname.
Also zum Beispiel, wenn in A1 Nein steht soll das Makro mit dem Namen Test ausgeführt werden, dann ist folgendes zu machen.
Gehe mit ALT+F11 in den VBA Modus und lege ein neues Modul an (Falls dein Makro nicht schon in einem Modul liegt), dort kommt erstmal folgender Code rein:
Function makro1_start()
'** Prozedur aufrufen
test
End Function
Sub test()
MsgBox "Makro test wurde gestartet"
End Sub
Um das jetzt zu Prüfen, nehmen wir in irgendeiner Zelle folgende Wenn Formel:
=WENN(A1="Nein";Makro1_start();"nichts")
Wenn alles geht sollte sich wenn in Zelle A1 Nein steht ein Meldungsfenster öffnen welches dir das auch bestätigt.
Das MsgBox "Makro 1 wurde gestartet" musst du dann mit deinem Makrocode ersetzen.
Ich hoffe ich konnte dir damit ein wenig weiter helfen, kommst du damit klar?
Hoffentlich habe ich nichts vergessen :)))
Ich habe kein VBA zur Hand, aber für die erste freie Zeile kannst du mit der Worksheetfunction ANZAHL2 über die Zeilen iterieren, um die erste freie Zeile zu finden.
Wenn du das Makro in einem Modul hast, es öffentlich ist und einen Wert nur zurück gibt, siehst du es ganz normal unter den Excelfunktionen aufgelistet. Dann kannst du deine Eigene Funktion auch innerhalb von WENNS verwenden.
Wie gesagt habe ich kein VBA zur Hand, deswegen seien mir kleinere Syntaxfehler oder Bezeichnungsfehler verziehen.
Die Idee:
Dim i As Integer
i = 1
While Application.WorksheetFunction.CountA(Range(i&":"&i)) <> 0
i = i + 1
Wend
wie soll das gehen?