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

Daten kopieren

Daten kopieren
21.01.2013 14:21:23
Julia
Hi,
ich habe eine große Datei in der sich die gesamte Buchhaltung befindet. Jetzt brauche ich für verschiedene Abteilungen Pivottabellen die nur den Zugriff auf die DAten der jeweiligen Abteilung ermöglichen. Da es nicht möglich ist, dass über die Pivot selber sicher zu stellen, möchte ich aus der Hauptdatei, die immer weiter geführt wird nur die jeweiligen Daten in neue Unterdateien kopieren die zur Abteilung gehören und darauf dann die Pivots aufbauen. Es gibt in der Hauptdatei zu jeder Buchung auch die Abteilung, es existiert also eine Spalte die angibt welche Abteilung es ist. Was ist die schnellste und sicherste Möglichkeit sowas zu machen? SVerweis, über VBA, andere Methode?
Danke für die Hilfe.
Grüße Julia

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten kopieren
21.01.2013 15:41:08
Klaus
Hallo Julia,
würd ich mit VBA machen.
Machst dir eine Liste von allen Abteilungen die Vorkommen können. Dann (Pseudocode):

for i = 1 to Abteilungsanzahl
Autofilter criteria = Abteilungsliste(i)
cells.copy
open file Abteilungsliste(i)
cells.paste
save file abteilungsliste(i)
close file Abteilungsliste(i)
next i
Um das in "echtem" Code auszudrücken, bräuchte ich mal eine Musterdatei von dir (vielleicht mit 2-3 Abteilungen) und den Pfadangaben, wo die "Abteilungs"-Dateien gespeichert werden.
Grüße,
Klaus M.vdT.

AW: Daten kopieren
21.01.2013 16:35:20
fcs
Hallo Julia,
hier ein Beispiel-Code. Im Prinzip die Idee von Klaus in ausgeschmückter Form umgesetz.
In deiner Buchaltungsdatei legst du ein Weiteres Blatt an, in dem die Abteilungsbezeichnhnungen und die zugehöeigen Dateinamen (inkl. Pfad) gelistet sind.
Das Makro legt eine Kopie der Buchhaltungstabelle an in einer temporären Mappe.
Dann werden die Daten nach den Abteilungen sortiert - verbessert die Kopierleistung nach dem Filtern.
Im nächsten Schritt werden per Autofilter die jeweiligen Abteilungsdaten gefiltert und in die Abteilungsdaten kopiert.
Die Pivottabellen würde ich dann nicht in den Abteilungstabellen mit den Buchchungsdaten erstellen sondern in separaten Exceldateien. Das hat den Vorteil, dass die Abteilungsdatei zu fast beliebigen Zeiten aktualisiert werden können ohne mit den Pivotberichtsauswertungen zu kollidieren.
Wenn die Pivot-Auswertungen in den Dateien mit den Abteilungsbuchungen gemacht werden, dann dürfen diese Dateien während der Makroausführung nicht geöffnet sein.
Gruß
Franz
Sub Export_Data_to_Abteilungen()
Dim wbkBH As Workbook, wksBH As Worksheet
Dim wbkZiel As Workbook, wksZiel As Worksheet
Dim wksAbt As Worksheet, lngZeileAbt As Long
Dim lngZeile As Long
Set wksBH = ActiveWorkbook.Worksheets("Buchhaltung") 'Tabellenblatt mit allen Buchungsdaten
Set wksAbt = ActiveWorkbook.Worksheets("Abteilungen") 'Tabelle mit Abt.-Bezeichnungen _
in Spalte A und Namen der Datei mit dem Buchhaltungsauszug für die Abteilung in Spalte B
With wksAbt
lngZeileAbt = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
'temporäre Kopie des Buchhaltungsblattes erstellen in neuer Mappe erstellen
wksBH.Copy
Set wbkBH = ActiveWorkbook
Set wksBH = wbkBH.Worksheets(1)
With wksBH
'Autofilter deaktivieren, falls gesetzt
If .AutoFilterMode = True Then .AutoFilterMode = False
'In Kopie alle Formeln durch Werte ersetzen
With .UsedRange
.Value = .Value
End With
'letzte Zeile mit Daten in Spalte mit Abteilungsbezeichnung
lngZeile = .Cells(.Rows.Count, 1).End(xlUp).Row '1 ggf anpassen
Application.ScreenUpdating = False
With .Range(.Cells(1, 1), .Cells(lngZeile, 7)) 'Startzeile (1) und letzte spalte (7) ggf  _
anpassen
'Daten sortieren nach Abteilung
.Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlYes
'Abteilungen abarbeiten in Schleife
For lngZeileAbt = 2 To lngZeileAbt
'Autofilter setzen auf Abteilungsbezeichnung
.AutoFilter Field:=1, Criteria1:=wksAbt.Cells(lngZeileAbt, 1) '1 bei Field ggf.  _
anpassen
'Zieldatei für Abteilung öffnen
Set wbkZiel = Application.Workbooks.Open(wksAbt.Cells(lngZeileAbt, 2))
'Zieltabellenblatt setzen
Set wksZiel = wbkZiel.Worksheets(1)
'Altdaten in Zieltabellenblatt löschen
With wksZiel
.UsedRange.ClearContents
End With
'gefilterte Daten kopieren in Zieltabelle
.Copy Destination:=wksZiel.Cells(1, 1)
wbkZiel.Save
wbkZiel.Close
Next
End With
'temporäre Kopie wieder schliessen
wbkBH.Close savechanges:=False
Application.ScreenUpdating = False
End With
End Sub

Anzeige
AW: Daten kopieren
22.01.2013 07:44:23
Julia
Vielen Dank für die ganze Hilfe!
Die Pivottabellen sind sowieso in anderen Dateien. Bisher war halt nur das Problem das auf diese Dateien mehrere Leute Zugriff haben und sich jeder der Pivots kennt das gesamte Unternehmen anzeigen lassen kann. Das sollte ja nicht sein, daher werde ich eure Vorschläge mal ausprobieren und gucken wie ich zurecht komme. Und vor allem gucken wie lange dann die Aktualisierung dauert. Habe eine andere Tabelle in der durch VBA eine Gesamtübersicht verschiedener Kalkulationen aus mehreren Tabellenblättern erstelle und da dauert die Aktualisierung immer eine ganze Weile. Meld mich dann nochmal ob es klappt.
Lg Julia

Anzeige
AW: Daten kopieren
21.01.2013 15:50:51
Daniel
Hi
von Hand kannst du ja so vorgehen:
1. Tabelle mit Autofilter nach einer Abteilung filtern
2. neue Datei anlegen
3. gefilterte Tabelle kopieren und in neue Datei einfügen, in gefilterten Tabellen werden nur die sichtbaren Zeilen bearbeitet
4. neue Datei speichern und schließen
5. ggf die geflilterten Zeilen löschen
Vorgang wiederholen, bis keine Daten mehr vorhanden sind oder alle Abteilungen gespeichert wurden.
als Makrocode dann so:
Sub AufAbeilungenVerteilen()
Dim Zelle1 As Range
Dim Zelle2 As Range
Const spAbteilung = 1 'Spaltennummer für abteilung, ggf anpassen
With ActiveSheet.UsedRange
Set Zelle1 = .Cells(2, spAbteilung)
.Sort Key1:=Zelle1, order1:=xlAscending, Header:=xlYes
Do While Zelle1.Value  ""
Set Zelle2 = .Columns(spAbteilung).Find(what:=Zelle1.Value, lookat:=xlWhole,  _
searchdirection:=xlPrevious)
Workbooks.Add
.Rows(1).Copy ActiveSheet.Cells(1, 1)
Range(Zelle1, Zelle2).EntireRow.Copy ActiveSheet.Cells(2, 1)
ActiveWorkbook.Save Zelle1.Name, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
Set Zelle1 = Zelle2.Offset(1, 0)
Loop
End With
End Sub

der Code ist für eine Standard-Tabelle geschrieben, dh keine Leerzeilen und Leerspalten, erste Zeile ist Überschrift, ab der zweiten Zeile folgen die Daten.
gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige