Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1400to1404
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Mehrfachkopieren von Tabellen in neue Kartei

VBA: Mehrfachkopieren von Tabellen in neue Kartei
05.01.2015 14:37:16
Tabellen
Hallo liebes Forum,
Ich habe von VBA quasi null Ahnung, bin aber dabei mich ein wenig reinzuarbeiten.
Für folgendes Problem suche ich eine Lösung:
Es gibt eine Wertetabelle in der Kartei "Tabelle1" in den Zellen A1:D3000.
Durch einen Makro (Application.Run "Makro") gebe ich wechselseitig Bedingungen vor, welche die Werte in dieser Tabelle ändern .
Ich möchte nun jede Änderung dieser Tabelle (also nach jeder Makroverwendung) in Kartei "Tabelle2" ablegen (eine Kopie herstellen).
Dies soll aller 7 Spalten geschehen. Also die erste Kopie der Berechnung in Tabelle2!A1:D3000, die nächste Kopie dann ab Spalte G1:J3000 usw.
Kann mir jemand einen Rat geben, wie der VBA-Code hierzu ausschauen könnte?
Danke vorab und beste Grüße
Joerschi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Mehrfachkopieren von Tabellen in neue Kartei
05.01.2015 14:45:05
Tabellen
Hallo,
Sheets("Tabelle1").Range("A1:D3000").copy Sheets("Tabelle2").cells(1,columns.count).end(xltoleft).Offset(,2)
Gruß
Rudi

AW: VBA: Mehrfachkopieren von Tabellen in neue Kartei
05.01.2015 15:12:07
Tabellen
Vielen Dank Rudi,
Das Kopieren klappt (habe den Offset-Wert noch auf 0 gesetzt, um tatsächlich in Spalte A der Zielkartei zu beginnen).
Meine ergänzende Frage wäre: wie kann man es einstellen, dass jede neue Kopie dann aller 7 Spalten erfolgt? (also nachdem via Makro sich die Daten der Ausgangstabelle immer wieder geändert haben)
meine Idee wäre:
Sub Beispiel()
Z = 1
For i = Sheets("Tabelle1").Range("A1:D3000").Copy To Sheets("Tabelle2").Cells(10, Columns.Count) _
.End(xlToLeft).Offset(, 0)
Application.Run "Makro"
Z = Z + 1
Next i
End Sub

Aber irgendwie sieht das noch...unrund aus bzw. ist ein wenig Stochern im Dunkel :-(.
Viele Grüße
Joerschi

Anzeige
AW: VBA: Mehrfachkopieren von Tabellen in neue Kartei
05.01.2015 15:24:13
Tabellen
Hallo,
habe den Offset-Wert noch auf 0 gesetzt
das ist falsch.
Sheets("Tabelle1").Range("A1:D3000").copy Sheets("Tabelle2").cells(1,columns.count).end(xltoleft).Offset(,iif(Sheets("tabelle2").Range("A1")="",0,2))
Gruß
Rudi

AW: VBA: Mehrfachkopieren von Tabellen in neue Kartei
05.01.2015 16:46:45
Tabellen
so richtig bekomme ich es noch nicht gebacken... :-(
Beim Testen in einer reinen TEstdatei funktioniert es - auch mit den Abständen.
Beim exakten Übertragen des Codes in die "Livedatei" mit den Echtdaten wird jede Kopie nur eine Spalte weitergerutscht (so dass sich alles überschneidet).
Hast Du eine Idee, woran dies liegen könnte?
Zudem werden Formeln in der Ausgangstabelle dann als #NV in der Kopie ausgegeben (mein Fehler - wusste nicht, dass man dies beachten muss: es sollten die Werte darin einfach nur übertragen werden, also Formel gibt es in der Kopie nicht mehr).
Viele Grüße
joerschi

Anzeige
Musterdatei mit Erklärung
06.01.2015 08:53:21
Joerschi
Wie schon im Parallelpost geschrieben klappt bei mir die Einbindung noch nicht so wie sie soll.
Ich denke, das Problem ist besser mit einer Musterdatei plus aktuellen Stand des VBA-Codes umrissen.
Unten noch einmal Erklärung, was passieren soll:
Userbild
Musterdatei: https://www.herber.de/bbs/user/94772.xlsm
(auf Grund der Dateigröße wurde die Mustertabelle auf 40 statt 3000 Zeilen begrenzt)
Was ist gegeben / Was soll passieren?
1. Es gibt eine aus Formeln und Zahlenwerten bestehende Wertetabelle von A1:D40 in Kartei "tabelle1", welche mehrfach in Kartei "tabelle2" kopiert werden soll (nur die errechneten Werte oder Strings - keine Formeln!). Und zwar dort immer aller 7 Spalten eine neue Kopie (1. Kopie beginnend Spalte A, zweite Kopie beginnend Spalte G usw).
2. Weiterhin legt man in Zelle H4 und I4 manuell fest, welche Zeilen (von - bis) der "Faktorentabelle" von H9:K37 ausgewertet werden sollen.
Die aktuelle zu bearbeitende Zeile ist in H5 definiert.
Abhängig von H5 werden nun in der Hilfstabelle H7:K8 nacheinander die Werte der "Faktorentabelle" hochgezogen und damit ändern sich automatisch alle Werte der Wertetabelle A1:D40 (welche lt. Punkt 1. kopiert werden sollen).
Aktueller VBA-Code:
Sub Beispiel()
For i = Sheets("tabelle1").Cells(4, 8) To Sheets("tabelle1").Cells(4, 9)
Sheets("tabelle1").Cells(5, 8) = i
Sheets("Tabelle1").Range("A1:D40").Copy Sheets("Tabelle2").Cells(1, Columns.Count).End(xlToLeft) _
.Offset(, IIf(Sheets("tabelle2").Range("A1") = "", 0, 2))
Next i
End Sub

Probleme nach wie vor:
1. Die Kopien in "tabelle2" werden nicht aller 7 Spalten gesetzt, sondern fortfolgend ab Spalte A (dadurch überlöscht es jedesmal die vorangegangene Kopie).
2. Es werden nicht ausschließlich die Werte/Texte kopiert, sondern auch Formeln (dadurch Fehlerwert in der Kopie).
Könnt Ihr einen Tipp geben, wie man das beheben kann?
Danke vorab und beste Grüße!
Joerschi

Anzeige
AW: Musterdatei mit Erklärung
06.01.2015 10:22:42
Rudi
Hallo,
Sub Beispiel()
Application.ScreenUpdating = False
With Sheets("Tabelle1")
For i = .Cells(4, 8) To .Cells(4, 9)
.Cells(5, 8) = i
.Range("A1:D40").Copy
With Sheets("Tabelle2")
.Cells(2, Columns.Count).End(xlToLeft).Offset(-1, IIf(.Range("A1") = "", 0, 3)). _
PasteSpecial xlPasteValues
End With
Next i
End With
Application.CutCopyMode = False
Application.Goto Sheets("Tabelle2").Range("A1"), True
End Sub

Gruß
Rudi

Ergänzungsfrage & Danke
06.01.2015 11:02:34
Joerschi
Hallo Rudi,
herzlichen Dank für die Hilfe.
Ich probiere grad ein wenig mit den "Stellschrauben" und es funktioniert.
Allerdings verstehe ich noch nicht, woher im Code VBA "weiß", mit welchen Werten aus H8:K8 es in der Tabelle rechnen soll.
In der "Realtabelle" ist es so, dass zwischendurch ein Makro läuft , welcher die Zellen H8:K8 woanders hinkopiert und auf diese "woanders" greift dann tatsächlich die Wertetabelle zu.
Ich finde partout keine Stelle im Code, wo man dieses Application.Run "Kopiere" einfügen kann.
Kannst Du bitte nochmal aushelfen mit Rat?
Danke vorab und Liebe Grüße
joerschi

Anzeige
AW: Ergänzungsfrage & Danke
06.01.2015 11:13:12
Rudi
Hallo,
was weiß ich!
Ich kenne deinen Code nicht.
Ich bin Zauberer und kein Hellseher ;-)
Application.Run brauchst du nur, wenn du einen Code aus einer anderen Mappe aufrufen willst.
Gruß
Rudi

AW: Ergänzungsfrage & Danke
06.01.2015 11:24:47
Joerschi
Sorry für die blöde(n) blutigen Anfängerfrage(n), wusste ich nicht :-(
Versuche einfach nur, die Logik dahinter zu begreifen.
Das meine ich:
Userbild
Musterdatei überarbeitet: https://www.herber.de/bbs/user/94775.xlsm
Via eines Makros werden die Zellen H8:K8 auf die Zellen G10:G13 nacheinander kopiert (mit Str+C & Str+V innerhalb des Makros).
Auf diese Zellen G10:G13 greift dann die Wertetabelle tatsächlich zu.
Den Zwischenschritt mit dem Makro wollte ich noch reinbauen.
Meine Code-Idee war folgende:
Sub Beispiel3()
Application.ScreenUpdating = False
With Sheets("Tabelle1")
For i = .Cells(4, 8) To .Cells(4, 9)
.Cells(5, 8) = i
.Range("A1:D40").Copy
Application.Run "KopiereFilter"
With Sheets("Tabelle2")
.Cells(2, Columns.Count).End(xlToLeft).Offset(-1, IIf(.Range("a1") = "", 0, 3)). _
PasteSpecial xlPasteValues
End With
Next i
End With
Application.CutCopyMode = False
Application.Goto Sheets("Tabelle2").Range("A1"), True
End Sub
Scheinbar keine schlaue Idee, funktioniert nämlich nicht :-(
Liebe Grüße
joerschi

Anzeige
AW: Ergänzungsfrage & Danke
06.01.2015 11:53:54
Rudi
Hallo,
was soll denn die Kopiererei? Warum beziehst du dich nicht direkt auf H8:K8?
Sub Beispiel3()
Application.ScreenUpdating = False
With Sheets("Tabelle1")
For i = .Cells(4, 8) To .Cells(4, 9)
.Cells(5, 8) = i
KopiereFilter
.Range("A1:D40").Copy
With Sheets("Tabelle2")
.Cells(2, Columns.Count).End(xlToLeft) _
.Offset(-1, IIf(.Range("a1") = "", 0, 3)).PasteSpecial xlPasteValues
End With
Next i
End With
Application.CutCopyMode = False
Application.Goto Sheets("Tabelle2").Range("A1"), True
End Sub
Sub KopiereFilter()
With Sheets("Tabelle1")
.Range("H8:K8").Copy
.Range("G10").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
End With
End Sub

Gruß
Rudi

Anzeige
AW: Ergänzungsfrage & Danke
06.01.2015 13:10:11
Joerschi
Hi Rudi,
vielen Dank.
Habe noch ein paar Sachen angepasst, aber klappt nun.
Das Kopieren war notwendig, weil die Zielzelle eigentlich dafür vorgesehen sind, auch mal manuell Werte einzutragen, woran sich die Wertetabelle orientiert.
Die Formellösung sichert hingegen ab, dass ich eine ganze Tabelle auswerten kann.
Für alle, welche mal ein ähnliches Problem haben:
Achtung - die Zelle A1 der WErtetabelle darf scheinbar keine Leerzelle sein, da sonst der Kopiervorgang in der Zieltabelle nicht mit dem Abstand zwischen den Spalten klappt. Ich habe letztlich ein Leerzeichen eingefügt, dann klappts.
Nochmal Danke @ Rudi, den Zauberer :-)
Viele Grüße
Joerschi
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige