Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1548to1552
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

Tabelle in bestehende Datei enfügen

Tabelle in bestehende Datei enfügen
21.03.2017 09:33:53
Annika
Hallo Profis!
ich habe folgende Problemstellung:
ich habe eine Excel mit vielen Tabellen, die im Prinzip alle gleich aufgebaut sind. Am Ende dieser Datei A soll eine Tabelle Datenauswertung erzeugt werden, in der alle Daten bestimmter Spalten der weiteren Tabellen untereinander aufgelistet sind. Daraus möchte ich meine Datenauswertung machen.
Den entsprechenden Code dafür habe ich bereits.
Meine Frage ist nun: ich möchte diese Tabelle Datenauswertung in einer Datei B speichern. Das soll aber eine bestehende Datei sein. Die Tabelle Datenauswertung soll in B ein neues Tabellenblatt werden. wie geht das? bis dato kann ich nur aus der Tabelle eine eigenständige Datei machen.
Hier ist mein bisheriger Code hinterlegt:
https://www.herber.de/bbs/user/112321.xlsm
Danke, für Eure Hilfe!
Annika

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle in bestehende Datei enfügen
21.03.2017 09:59:40
Max2
Hallo,
das müsste so funktionieren:

Sub tabelle_in_andere_datei()
Dim ws As Worksheet
Set ws = ThisWorkbooks.Sheets("Dein Sheet")
ws.Activate
ws.Select
Selection.Copy Destination:=Workbook("C:\..\..\Datei.xls").Sheets("Sheet wo es hin soll"). _
Range("A1")
Set ws = Nothing
End Sub

AW: Tabelle in bestehende Datei enfügen
21.03.2017 10:22:37
Annika
Hallo Max2,
danke, für die schnelle Antwort!
VBA meckert, dass This.Workbooks nicht definiert ist..
so habe ich es eingefügt in den bestehenden Code:
Option Explicit
Sub blatt_abspeichern()
Dim sh As Shape
Dim vDate As String
Application.ScreenUpdating = False
'Datum im Format: "JahrMonatTag" --> "20170127"
vDate = Format(Date, "DD.MM.YY")
Application.DisplayAlerts = False
Range("A2").Select
Sheets("Datenauswertung").Select
Sheets("Datenauswertung").Copy
Cells.Select
Selection.Copy
'Füge die Daten ein
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A2").Select
Application.CutCopyMode = False
'Speichern in anderer Datei
Dim ws As Worksheet
Set ws = ThisWorkbooks.Sheets("Datenauswertung")
ws.Activate
ws.Select
Selection.Copy Destination:=Workbook("X:\YYY.xls").Sheets("Datenauswertung"). _
Range("A1")
Set ws = Nothing
'Lösche die Buttons raus
For Each sh In ActiveSheet.Shapes
If TypeName(sh.OLEFormat.Object) = "Button" Then sh.Delete
Next
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
vielleicht findest du den Fehler?
Grüße,
Annika
Anzeige
AW: Tabelle in bestehende Datei enfügen
21.03.2017 11:05:14
Max2
Hallo,
mein Fehler tut mir leid...
Hier ein Makro´, voraussetzung ist, dass das ganze in einem eigenen Modul steht!
Die Daten musst du noch anapssen!
Code:

Option Explicit
Sub blatt_in_datei()
Dim wbToPaste As Workbook
Dim wsToCopy, wsToPaste As Worksheet
Dim counter As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Speichern in anderer Datei
Set wsToCopy = ThisWorkbook.Sheets("Datenauswertung")
'//Wir öffnen erst die Datei wo die Tabelle hinsoll
Workbooks.Open "C:\Users\ich\Desktop\Mappe1.xlsx" '

Anzeige
AW: Tabelle in bestehende Datei enfügen
21.03.2017 13:03:36
Annika
Hallo Max2,
was genau meinst du mit:
 '//Workbook wo es rein soll
Set wbToPaste = Workbooks("Datenauswertung.xls") '
da hätte ich jetzt Datenauswertung als neuen Tabellennamen eingetragen, aber da kommt ein Fehler :/
Grüße,
Annika
AW: Tabelle in bestehende Datei enfügen
21.03.2017 13:12:16
Annika
Hallo Max2,
ich habe es rausbekommen.
ein weiteres Problem: die Tabelle Datenauswertung wird zwar in die neue Datei kopiert, allerdings werden da die Makros dringelassen und in der Quelldatei rausgenommen. Eigentlich sollte es andersrum sein... und kann man das einstellen, dass in der neuen Datei immer dieses Blatt überschrieben wird, wenn man in der Quelldatei wieder auf Speichern klickt? dass esnicht irgendwann zig Datenauswertungs-Tabellen in der neuen Datei gibt, sondern nur diese eine mit immer den aktuellsten Werten?
Option Explicit
Sub blatt_in_datei()
Dim wbToPaste As Workbook
Dim wsToCopy, wsToPaste As Worksheet
Dim counter As Integer
Dim sh As Shape
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Speichern in anderer Datei
Set wsToCopy = ThisWorkbook.Sheets("Datenauswertung")
'//Wir öffnen erst die Datei wo die Tabelle hinsoll
Workbooks.Open "XXXxlsm" ''Lösche die Buttons raus
        For Each sh In ActiveSheet.Shapes
If TypeName(sh.OLEFormat.Object) = "Button" Then sh.Delete
Next
ActiveWorkbook.Save
ActiveWorkbook.Close
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Danke!
Grüße,
Annika
Anzeige
AW: Tabelle in bestehende Datei enfügen
21.03.2017 14:07:04
Max2
Hallo,
der Code wird nur kopiert wenn der oben stehende Code auch
in der Tabelle steht also nicht in einem Modul sondern eben im
Code der Tabelle... und bei dem Code macht es so gar keinen Sinn
den direkt in den Tabellen Code zu schreiben...
Ja das geht.
Hier deine Datei: https://www.herber.de/bbs/user/112326.xlsm
(Schau in den Code von "DieseArbeitsmappe")
AW: Tabelle in bestehende Datei enfügen
21.03.2017 14:54:19
Annika
Hallo Max2,
perfekt!
Jetzt habe ich nur noch eine Feinschliff- Frage:
wie kann man sagen, dass
Spalte 1 in der Tabelle an der Stelle der Spalte 1 stehen soll,
Spalte 11 an 2.,
Spalte 12 an 3.,
Spalte 13 an 4.,
Spalte 14 an 5.,
Spalte 24 an 6.,
Spalte 26 an 7.,
Spalte 27 an 8.,
Spalte 33 an 9.,
Spalte 37 an 10.,
Spalte 38 an 13.,
Spalte 40 an 14.,
Spalte 41 an 15.,
Spalte 42 an 18.,
Spalte 46 an 19.
In den Spalten, die jetzt leer sind, kommen Formeln rein. Kann man das auch automatisch ins Makro reinschreiben?
Danke!
Grüße,
Annika
Anzeige
Super und verstehe Frage nicht ganz
21.03.2017 15:05:40
Max2
Hallo,
schön das es funktioniert.
Ich muss leider gestehen dass ich deine Frage nicht ganz verstehen.
Was möchtest du genau mit welcher Spalte tun?
AW: Super und verstehe Frage nicht ganz
21.03.2017 15:15:06
Annika
Hallo Max2,
war vielleicht etwas verwirrend geschrieben :D
bis jetzt ist es doch so, dass die entsprechenden Spalten aus der Quelldatei geholt und untereinander geschrieben werden. In der Tabelle Datenauswertung sind dann zwischen den Spalten so viele Leerspalten. Jetzt könnte man zwar noch ein Makro einbauen, dass die leeren Spalten gelöscht werden, aber praktischer wäre es, wenn die die entsprechenden Spalten in der Datenauswertung gleich auf ihren richtigen Platz gesetzt werden, die die ich oben geschrieben habe. Also dass die Spalte Kriterium 3 in die Spalte A gesetzt wird und so weiter.
Weißt du, was ich meine?
Grüße,
Annika
Anzeige
AW: Super und verstehe Frage nicht ganz
21.03.2017 16:01:26
Max2
Hallo,
ersetze mal deinen Code mit dem und guck ob es Funktioniert :)

Option Explicit
Sub daten_in_Blatt()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim lzeile As Long
Dim lzeile2 As Long
Dim rng As Range
Dim rng2 As Range
Dim wsAnzahl As Integer
Dim i, j
Dim x, k
Dim tabuTabellen
Dim y
Dim bool As Boolean
Dim count As Integer
'//Alte Daten entfernen
Call daten_loeschen
'//Anzahl der vorhandenen Sheets
wsAnzahl = ThisWorkbook.Sheets.count
i = 1: j = 0: k = 1
x = Array(3, 11, 12, 13, 14, 24, 26, 27, 33, 37, 38, 40, 41, 42, 46)
tabuTabellen = Array("Datenauswertung", "Inhalt", "FAQ")
Application.ScreenUpdating = False
Do
Set ws = ThisWorkbook.Sheets("Datenauswertung")
bool = False
For y = 0 To UBound(tabuTabellen)
If ThisWorkbook.Sheets(i).Name = tabuTabellen(y) Then
count = count + 1
If count > 0 Then
bool = True
count = 0
End If
End If
Next y
If bool = True Then GoTo nextBlatt
Set ws2 = ThisWorkbook.Sheets(i)
'//Setzen des zu kopierenden Bereichs
'//anschließend Bereich kopieren
With ws2
lzeile2 = .Cells(.Rows.count, x(j)).End(xlUp).Row
If lzeile2 = 9 Then lzeile2 = lzeile2 + 1
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))
If lzeile2  (wsAnzahl) Then
j = j + 1
i = 1
End If
Loop Until j > UBound(x)
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Super und verstehe Frage nicht ganz
21.03.2017 16:23:16
Annika
Hallo Max2,
leider gar nicht, alles verschiebt sich komplett durcheinander :/
Ich hätte gedacht, dass man eine Art Zuweisung machen kann, also Spalte 3 geht an Platz Spalte A zum Beispiel.
Danke trotzdem!
Grüße,
Annika
Beispiel Mappe
21.03.2017 16:25:51
Max2
Hallo,
könntest du nochmals eine Beispiel Mappe reinstellen mit Daten die übertragen werden?
Dann kann ich mir das nochmal anschauen und schnell abändern :)
AW: Beispiel Mappe
21.03.2017 16:35:21
Annika
Hallo Max2,
https://www.herber.de/bbs/user/112329.xlsm
so sieht das jetzt aus, in der Testdatei.
in meiner richtigen Datei sieht es noch wirrer aus :P
Grüße,
Annika
Anzeige
AW: Beispiel Mappe
22.03.2017 08:16:10
Max2
Guten Morgen,
probiere es mal mit dem Code:

Option Explicit
Sub daten_in_Blatt()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim lzeile As Long
Dim lzeile2 As Long
Dim rng As Range
Dim rng2 As Range
Dim wsAnzahl As Integer
Dim i, j, k, y
Dim x
Dim tabuTabellen
Dim bool As Boolean
Dim count As Integer
'//Alte Daten entfernen
Call daten_loeschen
'//Anzahl der vorhandenen Sheets
wsAnzahl = ThisWorkbook.Sheets.count
i = 1: j = 0: k = 1
x = Array(3, 11, 12, 13, 14, 24, 26, 27, 33, 37, 38, 40, 41, 42, 46)
tabuTabellen = Array("Datenauswertung", "Inhalt", "FAQ", "neueDatei", _
"Inhaltsverzeichnis")
Application.ScreenUpdating = False
Do
Set ws = ThisWorkbook.Sheets("neueDatei")
bool = False
For y = 0 To UBound(tabuTabellen)
If ThisWorkbook.Sheets(i).Name = tabuTabellen(y) Then
count = count + 1
If count > 0 Then
bool = True
count = 0
End If
End If
Next y
If bool = True Then GoTo nextBlatt
Set ws2 = ThisWorkbook.Sheets(i)
'//Setzen des zu kopierenden Bereichs
'//anschließend Bereich kopieren
With ws2
lzeile2 = .Cells(.Rows.count, x(j)).End(xlUp).Row
If lzeile2 = 9 Then lzeile2 = lzeile2 + 1
Set rng2 = .Range(.Cells(10, x(j)), .Cells(lzeile2, x(j)))
If lzeile2  (wsAnzahl) Then
j = j + 1
i = 1
k = k + 1
End If
Loop Until j > UBound(x)
Application.ScreenUpdating = True
End Sub
Bei mir macht er alles richtig, ich hoffe bei dir auch.
Ich habe es jetzt so gemacht dass in der ersten Zeile auf "neueDatei" immer
drinnen steht nach was er gesucht hat.
Anzeige
AW: Beispiel Mappe
22.03.2017 10:28:12
Annika
Guten Morgen Max2,
es klappt einwandfrei!
Vielen lieben Dank!
eventuell hast du Lust mir bei noch einer kleinen Kleinigkeit zu helfen?
Zwischen der Spalte 9 und 10 in der Tabelle Datenauswertung (also in der die Daten bereits eingefügt wurden), bzw. nach Spalte 27 in den diversen Tabellen, muss ich manuell eine leere Spalte einfügen um eine Formel zur Berechnung einzugeben:
https://www.herber.de/bbs/user/112340.xlsx
hier ist es besser ersichtlich, als wenn ich es beschreibe. Das ist quasi die Datei, in der die Daten exporitiert werden.
Kann man nun schon im Code sagen, dass entsprechend der Spalten die Formeln eingefügt werden?
Grüße und danke für deine Mühe!
Annika
Anzeige
AW: Beispiel Mappe
22.03.2017 16:54:44
Max2
Hallo,
erstelle ein Modul und schreibe folgendes rein:

Option Explicit
Sub spalten_definiert()
Dim ws As Worksheet
Dim userInput As String
Set ws = ThisWorkbook.Sheets("Datenauswertung")
With ws
userInput = Application.InputBox("Geben Sie die Spalte an, wo die neue Spalte eingefügt  _
werden soll", "Spalte_xy")
.Range(userInput & 1).EntireColumn.Insert
End With
End Sub
Dieser Sub öffnet eine User Abfrage, in diese muss der Nutzer dann die Spalte
angeben wie er sie Excel sieht, also z.B. K
AW: Beispiel Mappe
23.03.2017 10:19:14
Annika
Hallo Max2,
das klappt ja perfekt!
kann man jetzt noch im Modul Daten in die bereits bestehende Datei einfügen sagen, dass die Spalten, die leer sind, also die ich mir durch deinen eben geschickten Code nachträglich einfüge, nicht mit kopiert werden sollen? diese überschreiben dann nämlich die Formeln in der neuen Datei, die in eben diese Spalten eingefügt werden.
Weißt du, wie ich es meine?
also dass man in dem Code sagt: Kopiere alle Spalten in die andere Datei rüber (so dass sie auch wieder in der gleichen Spalte landen), außer die neuen Spalten K,L,P,Q und U, da dort nämlich schon meine Formlen drin stehen.
Danke Dir!
Grüße,
Annika
AW: Beispiel Mappe
23.03.2017 10:42:02
Annika
Anmerkung:
und dass ebenfalls die Zeile 2 nicht mit rauskopiert wird? dort stehen die Benennungen der Kriterien, das ist sonst lästing, das immer wieder neu einzutippen.
Vielen vielen Dank!!!
AW: Beispiel Mappe
24.03.2017 09:28:39
Annika
Hallo Max2,
ich habe viel rumprobiert, aber bekomme es leider nicht hin.
Vielleicht hast du nochmal Zeit zum Helfen?
Vielen Dank!
Annika Künzel
Quick and Dirty... aber schlecht
24.03.2017 11:03:53
Max2
Hallo...
hier ein Quick and Dirty Code:
Option Explicit
Sub blatt_abspeichern_2()
Dim wbToPaste As Workbook
Dim wsToCopy, wsToPaste As Worksheet
Dim ws As Worksheet
Dim counter As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'Speichern in anderer Datei
Set wsToCopy = ThisWorkbook.Sheets("Datenauswertung")
'//Wir öffnen erst die Datei wo die Tabelle hinsoll
Workbooks.Open "C:\Users\max.bader\Desktop\Mappe1.xlsm" '
Keine schöne Lösung, aber ich habe die nächsten Tage keine bis sehr wenig Zeit, tut mir leid.
Der Code kopiert einfach die Spalten aus der Kopie in das Original und das Original wird dann
einfach wieder abgespeichert.
Du holst dir also mit dem Code, einfach die Spalten mit Formeln aus der Kopie in das Original,
dann wird die Kopie gelöscht, das Original kopiert und eingefügt.
AW: Quick and Dirty... funktioniert!
24.03.2017 13:10:21
Annika
Hallo Max2,
das klappt ja wie am Schnürchen!

Vielen Dank!

Ich wollte nun auch noch einfügen im Code, dass die ganze Zeile 2 nicht überschrieben wird. Da stehen die Namen für die Kriterien drin.

ws.Range("A2").EntireLine.Copy
wsToCopy.Range("A2").PasteSpecial Paste:=xlPasteAll
klappt aber nicht. vielleicht weißt du noch was.
Ansonsten war es das, vielen vielen Dank!
Wo hast du den dein ganzes Wissen her? Kannst du einen Kurs, etc. empfehlen oder kam das Wissen durch Trail and Error? Toll auf jeden Fall!
Grüße,
Annika
.EntireRow.Copy
24.03.2017 13:57:01
Max2
Hallo,
das muss ws.Range("A2").EntireRow.Copy heißen :)
Dann kopiert er aber auch wirklich die gesamte Zeile 2!
Wenn nur A2 kopiert werden soll, dann: ws.Range("A2").Copy

Oder
wsToCopy.Cells(2, 1).Value = ws.Cells(2, 1).Value
AW: .EntireRow.Copy
24.03.2017 14:59:26
Annika
Hallo Max2,
Dankeschön!
Schönes Wochenende Dir!
Grüße,
Annika

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige