ich bin sehr neu im Excel VBA Gebiet und muss mir gerade alles selbst erarbeiten. Dazu fehlt mir irgendwie eine einfache und verständliche Erklärung (wenn also jemand ein Buch empfehlen kann...) :)
Meine Aufgabe in der Firma ist es bereits vorhandene Abläufe über viele Makros - welche keiner mehr ohne ausführliche Anleitung ausführen kann - zu vereinfachen. Mein großes Problem: ich bin angehender Wirtschaftsingenieur und kein Wirtschaftsinformatiker - entsprechend fehlen mir die Grundlagen...
Ein erster großer Schritt wäre eine copy und paste Schleife für immer unterschiedlich viele Zeilen, in immer gleiche Spalten (da es sich hierbei mal schnell um 1000 Zeilen und 12 Spalten handelt möchte ich das nicht mehr mit dem Recorder aufnehmen...).
So habe ich unter Tabelle 2 meine Ausgangstabelle mit den Quelldaten und in weiteren Arbeitsblättern verschiedene Kundenvorlagen in welche die Daten hinein müssen.
Im ersten Schritt könnte ich also alle Werte aus Spalte E (Tabelle 2) in Z7 S4 (Tabelle 3) kopieren und benötige eine Schleife, die das ganze für jede gefüllte Zeile tut (auch leere Zellen müssen mit übertragen werden). (Und ja, die Formatvorlage ist, aus mir unerklärlichen Gründen, nicht im Standardformat A1, B1, C2..., sondern in Z7S3 (Zeile 7, Spalte 3)
Kann mir dabei irgendwer helfen? Habe ich eine wichtige Info vergessen??
Ist es möglich, dass der Code "so schlau" ist, dass er zwischen Daten auch (mehrere) leere Zeilen kopiert, aber nur, bis es in der Spalte keine Daten mehr gibt?
18.01.2021, 14:27 (Dieser Beitrag wurde zuletzt bearbeitet: 18.01.2021, 14:35 von Luca-441.)
Macht was es soll! Vielen Dank!! --> Update: geht nicht mehr, aber ich weiß nicht wieso... Fehler im Anhang
Vielleicht kannst Du mir gleich noch bei einem Problem helfen.
Und zwar habe ich bereits einen funktionierenden Code, der den Windows-Explorer zur Auswahl einer Excel zum importieren in Tabelle 2.
Diesen Makra habe ich auf ein Bild zugewiesen. Wenn ich nun auf das Bild klicke öffnet sich VBA und erst darüber kann den Makro richtig ausführen - das ist natürlich suboptimal, wenn meine Kollegen somit im Code was verändern können... Wie kann ich das abstellen? Anbei der Code:
Da dein Workbook mehrere Sheets hat, muss mein Code entsprechend angepasst werden.
Die gezeigten Bilder passen nicht zum Text: Makro starten per Bild anklicken.
Generell gilt: zuerst sollte ein fehlerfreier VBA-Code erstellt werden (im VBE starten F5/F8) und danach entscheiden, wie der User den Code startet: Bild/Button anklicken, im Menü Ansicht - Makro, Tastatur-shortcut
Der Code funktioniert immer nur beim Neustart von Excel - geht das zu beheben? Das nervt beim testen.. (zurücksetzen oder löschen der Daten hilft nicht :/ )
Außerdem hab ich den selben Code mit neuen Daten gefüttert immer wieder kopiert und habe gehofft, dass so die nächsten Spalten auch gefüllt werden können. Das Ergebnis ist komisch, als würde Excel immer eine Spalte mehr mit kopieren... (erste die gewünschte 1, dann 2, 3 usw.)
Wie geht das zu beheben?
Sozusagen so:
Sub AFT()
Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 5), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 4) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 6), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 13) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 7), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 14) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 13), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 17) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 20), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 19) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 25), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 20) Sheets("Hier NAV Ausgabe einfügen").Range(Cells(2, 26), Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("ET-VT AFT").Cells(7, 21)
Es wäre besser eine anonymisierte Datei hier hoch zu laden. Es wäre auch besser die Arbeitsblätter mehr isomorph zu gestalten. Und warum Daten doppelt in einer Datei ?
Code:
Sub M_snb() sn = Sheets("Hier NAV Ausgabe einfügen").UsedRange.Offset(1) sp = Evaluate("row(1:" & UBound(sn) & ")")
For j = 1 To 7 Sheets("ET-VT AFT").Cells(7, Choose(j, 4, 13, 14, 17, 19, 20, 21)).Resize(UBound(sn)) = Application.Index(sn, sp, Choose(j, 5, 6, 7, 13, 20, 25, 26)) Next End Sub