Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1652to1656
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

Spalten kopieren und in andere Datei einfügen

Spalten kopieren und in andere Datei einfügen
01.11.2018 11:28:54
parza
Hallo Fachleute,
mit Hilfe von Google habe ich unten stehendes Makro gefunden. Ob es wirklich gut so ist, weiß ich nicht, aber es funktionert zunächst mal. Ziel ist es, aus einer Tabelle (Sheet „Personal“) ausgewählte Spalten zu kopieren und woanders einzufügen. DIn meinem Makro fügt er die Inhalte aber in die gleiche Datei unter Sheet „KE“ ein. Ich hätte aber gern, dass er sie in eine andere, noch nicht geöffnete Datei z.B. C:\Test\test.xls an der Position B5 einfügt.
Ich wäre euch sehr dankbar für die Unterstützung.
parza
Option Explicit
Sub kopieren()
Dim Spalte As Variant, intI As Integer
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
For intI = 0 To 4
Worksheets("Personal").Select
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy
Worksheets("KE").Select
Cells(3, intI + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Next
Range("B5").Select
Application.ScreenUpdating = True
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 11:33:07
Hajo_Zi
das geht nicht, dazu muss die Datei auf sein
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy Workboooks("Datei1.xlsm").Worksheets("KE").Cells(3, intI + 1)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:07:33
parza
Hajo, danke für die rasche Antwort. Ich bin vba-Laie. Wo muss ich dies in meinem Makro einfügen bzw. wie sieht das Ganze komplett aus?
Danke parza
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:09:53
Hajo_Zi
ersetze diesen Teil
Range(Cells(3, Spalte(intI)), Cells(Worksheets("Personal").Cells(Rows.Count, Spalte( _
intI)).End(xlUp).Row, Spalte(intI))).Copy
Worksheets("KE").Select
Cells(3, intI + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Ich bin davon ausgegangen das die Datei vorher geöffnet wurde mit Open.
Gruß Hajo
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:33:55
parza
Nochmals danke. Aber leider komme ich nicht weiter.
Vielleicht habe ich meine Frage falsch gestellt.
Das Makro funktioniert prizipiell, aber die kopierten Spalten sollen nicht in der Ausgangsdatei in Sheet "KE" eingefügt werden, sondern in einer neuen Datei, die in einem anderen Verzeichnis liegt C:\Test\test.xls und dort in Zelle B5.
Vielleicht findet sich nun eine Lösung.
parza
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:36:09
Hajo_Zi
das kann ich nicht, da ich nicht auf fremde Rechner schaue.
Ich vermute mal Du hast meine Beiträge nicht komplett gelesen.
Viel Erfolg noch.
Gruß Hajo
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 12:57:13
parza
.. doch habe ich. Auch eine Datei in C:\Test\test.xls existiert und diese ist auch geöffnet.
Schönen Feiertag, parza
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 15:09:06
Werner
Hallo,
teste mal. Bei dem Code muss die Zieldatei geschlossen sein. Per Code wird die Zieldatei geöffnet, die Daten kopiert, die Zieldatei gespeichert und wieder geschlosse.
Option Explicit
Sub kopieren()
Dim intI As Integer, loLetzteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("C:\Test\test.xlsx")
Set wsZiel = wbZiel.Worksheets("Der_Name_des_Zielblattes")
For intI = 0 To 4
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'letzte belegte Zeile ermitteln + 1
loLetzteZiel = .Cells(.Rows.Count, 2).End(xlUp).Offset(1).Row
'Prüfung ob die kleiner 5 ist, dann einfügen bei 5
If loLetzteZiel 
Achtung: Es erfolgt keine Prüfung ob die Zieldatei schon offen ist.
Gruß Werner
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 15:57:58
parza
.... vielen herzlichen Dank.
Ist zu 99% genau das, was ich wollte.
Eine Sache ist noch, nämlich dass alle Spalten untereinander in der Spalte B kopiert werden.
Ich habe es nicht ausdrücklich formuliert: Die kopierten und eingefügten Spalten sollten nebeneinander sein.
Noch eine Frage: Falls sich meine Zieldatei einmal ändert. Wo müsste ich deinen Code ändernm um z.B. nicht in B5, sondern in A3 einzufügen.
parza
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 16:13:01
Werner
Hallo,
dann so:
Option Explicit
Sub kopieren()
Dim intI As Integer, loZeileZiel As Long, loSpalteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
'festlegen der Zielzeile
loZeileZiel = 5
'festlegen der Zielspalte (Startspalte) A=1, B=2 ...
loSpalteZiel = 2
Spalte = Array(10, 11, 24, 28, 31)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("C:\Test\test.xlsx")
Set wsZiel = wbZiel.Worksheets("Der_Name_des_Zielblattes")
For intI = 0 To 4
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'kopierte Daten als Werte einfügen
.Cells(loZeileZiel, loSpalteZiel).PasteSpecial Paste:=xlPasteValues
loSpalteZiel = loSpalteZiel + 1
End With
End With
Next
'Zielblatt speichern und schließen
wbZiel.Close True
'Kopierspeicher leeren
Application.CutCopyMode = False
'Variablen aufräumen
Set wbZiel = Nothing: Set wsZiel = Nothing
End Sub
Gruß Werner
Anzeige
AW: Spalten kopieren und in andere Datei einfügen
01.11.2018 16:20:58
parza
Tausend Dank, perfekt. Vor allem deine Erklärungen lassen es für mich ein bisschen duchsichtiger werden.
parza
Gerne u. Danke für die Rückmeldung. o.w.T.
01.11.2018 16:24:19
Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 08:42:10
parza
Hallo Werner, hallo Fachleute,
danke nochmals für eure große Unterstützung gestern. Ich habe nun den Code in die Originaldatei eingefügt. Unterschied sind Dateinamen und Dateipfad (ist unerheblich und funktioniert). Eine große Änderung ist, dass es im Original mehr Spalten = Arrays sind.
Nun zum Problem und was ich durch Versuch/Irrtum herausgefunden habe:
Lasse ich den Code "For intI = 0 To 4" so wie im Originalcode von Werner, läuft alles durch, allerdings werden nur 5 Spalten kopiert und eingefügt.
Ändere ich "For intI = 0 To 20" kommt ein Debugging (gelb markiert) mit Laufzeitfehler 9 bei diesen Zeilen
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
Beende ich nun das Debuggen, ist trotzdem alles an der richtigen Stelle und komplett eingefügt und kopiert.
Hat noch jemand eine Idee?
parza
Option Explicit
Sub KE_erstellen()
Dim intI As Integer, loZeileZiel As Long, loSpalteZiel As Long
Dim wbZiel As Workbook, wsZiel As Worksheet, Spalte As Variant
'festlegen der Zielzeile
loZeileZiel = 3
'festlegen der Zielspalte (Startspalte) A=1, B=2 ...
loSpalteZiel = 3
Spalte = Array(10, 11, 16, 17, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 43)
Application.ScreenUpdating = False
'Datei öffnen und Zielblatt zuweisen
Set wbZiel = Workbooks.Open("Q:\4\41\AllgemeinesSG41\Zusammenarbeit\Kostenersatz\18_19\xxxx  _
KE_18_19.xls")
Set wsZiel = wbZiel.Worksheets("Tabelle1")
For intI = 0 To 20
With ThisWorkbook.Worksheets("Personal")
'Bereich kopieren
.Range(.Cells(3, Spalte(intI)), .Cells(.Cells(.Rows.Count, _
Spalte(intI)).End(xlUp).Row, Spalte(intI))).Copy
With wsZiel
'kopierte Daten als Werte einfügen
.Cells(loZeileZiel, loSpalteZiel).PasteSpecial Paste:=xlPasteValues
loSpalteZiel = loSpalteZiel + 1
End With
End With
Next
'Zielblatt speichern und schließen
'wbZiel.Close True
'Kopierspeicher leeren
Application.CutCopyMode = False
'Variablen aufräumen
Set wbZiel = Nothing: Set wsZiel = Nothing
End Sub

Anzeige
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 08:49:27
Werner
Hallo,
na ja, dein Array hat 20 Werte. Das Array ist aber Nullbasiert. Hat also Werte von 0-19 = 20 Werte.
Hier
For intI = 0 To 20

versuchst du aber den Wert 20 im Array anzusprechen - den gibt es aber nicht.
Also
For intI = 0 To 19
Gruß Werner
AW: Gerne u. Danke für die Rückmeldung. o.w.T.
02.11.2018 09:22:11
parza
... vielen Dank. Das war die Lösung. Ich bin von 20 Zahlen = 20 Spalten ausgegangen. vba-Laie halt.
Werner, wenn du in München wohnen würdest, hättest du ein Bier gut.
Danke, parza
Gerne doch...
02.11.2018 09:33:41
Werner
Hallo,
...das ist für mich jetzt leider nicht gerade um die Ecke.
Gruß Werner
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige