Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

#WERT! - Problem nach Kopieren mit Makro
#1
Question 
Hallo an die Expertenwelt,

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...  16

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??

LG Luca
Antworten Top
#2
Hallo,

es gibt viele Varianten Ranges auszuwählen. Als Anfang hier ein Code, der alle gefüllten Zellen der Spalte E kopiert:

Code:
sheets(2).range(cells(1,5), cells(rows.count, 5).end(xlup)).copy sheets(3).cells(7,4)

"Cells(1,5)" ist gleichwertig zu Range("E1")

In diesem Fall können Quelle und Ziel in einer VBA-Zeile stehen, falls "pasteSpecial()" benötigt wird, müssen es zwei VBA-Zeilen sein.

VBA kann sowohl in der "A1" als auch in der "RC" Notation Befehle ausführen, Das ist unabhängig von den Einstellung des Arbeitsblattes.

Die genannte Aufgabe ist gut geeignet VBA zu lernen.

mfg

(ungeprüft)
Antworten Top
#3
Vielen Dank für Deine schnelle Antwort Fennek!  

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?

LG Luca
Antworten Top
#4
Genau das sollte der gezeigte Code machen.

Zum Prüfen des Bereichs hilft:

Code:
sheets(2).range(cells(1,5), cells(rows.count, 5).end(xlup)).select

Dann kann man sich in Ruhe ansehen, welche Zelle kopiert werden.

Im fertigen Code sollte "select" vermieden werden.

Im VBE (VBA-Editor) solltest Du die Funktion "Einzelschritt" (F8) kennen und bei Bedarf zum debuggen nutzen.
[-] Folgende(r) 1 Nutzer sagt Danke an Fennek für diesen Beitrag:
  • Luca-441
Antworten Top
#5
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:

 LG Luca


Angehängte Dateien Thumbnail(s)
       
Antworten Top
#6
Aus den beiden Bildern kann ich nur allgemeine Statements ableiten:

Ein Worksheet kann angesprochen werden:

- Index; Sheets(2)
- Name; Sheets("MeinSheet")
- Codename; Tabelle2.Cells(1,1)

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
Antworten Top
#7
Alles klar. Vielen lieben Dank!! Hast sehr geholfen. :)
Antworten Top
#8
Ich muss leider doch noch mal nerven.

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)

End Sub
Antworten Top
#9
Hallöchen,

Zitat:Der Code funktioniert immer nur beim Neustart von Excel
Wie äußert sich das?

Zitat:Das Ergebnis ist komisch, als würde Excel immer eine Spalte mehr mit kopieren...
schaue mal damit in die Überwachung, welchen Bereich Du kopierst ...

Range(Cells(2, 26), Cells(Rows.Count, 5).End(xlUp)).Address
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#10
Diese Frage ist noch nicht beantwortet:

Excel-VBA für Dummies: Amazon.de: Walkenbach, John, Haselier, Rainer G.: Bücher

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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste