Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1076to1080
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 in andere Datei üebrtragen-Netzlaufwerk

Daten in andere Datei üebrtragen-Netzlaufwerk
20.05.2009 11:58:36
Andreas
Hallo zusammen,
ich habe folgendes Problem. Ich muss eine Datei zur Verfügung stellen, welche nur eine bestimmte Anzahl von Daten benötigt. Die Originaldatei hat also zuviel Infos (zuviel Spalten). Daß man Spalten innerhalb einer Arbeitsmappe übertragen kann ist mir bewußt. Kann ich jedoch Daten an eine andere Datei übertragen? Beide Dateien liegen auf einem Netzlaufwerk. Es müssen nur ganze Spalten übertragen werden, in denen in Zeile 3 ein eindeutiger Wert steht, worauf man sich beziehen kann. Wenn so etwas möglich ist, gibt es eventuell Beispiele?
mfG
Andreas Müller

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
20.05.2009 15:19:21
fcs
Hallo Andreas,
das folgende Makro kann eine solche Kopieraktion durchführen.
Die Namen (Pfad+Name) der Dateien und der Tabellen im Code muss du entsprechend anpassen.
Das Makro ist so aufgebaut, dass vor dem Start des Makros beide Dateien (Ziel + Original) geschlossen sein müssen. Die Originaldatei wird nach dem Kopieren wieder geschlossen.
Gruß
Franz

Sub DatenausOriginalHolen()
Dim wbOrig As Workbook, wbZiel As Workbook
Dim wksOrig As Worksheet, wksZiel As Worksheet
Dim SpalteZiel As Long, SpalteOrig As Long
Const ZeileKey As Long = 3
Set wbZiel = Workbooks.Open(Filename:="C:\Lokale Daten\Test\Mappe1.xls")
Set wksZiel = wbZiel.Worksheets(1)
Set wbOrig = Workbooks.Open(Filename:="C:\Lokale Daten\Test\Original.xls", _
ReadOnly:=True)
Set wksOrig = wbOrig.Worksheets(1)
'Daten im Zielblatt unterhalb Zeile 3 löschen
With wksZiel
If .Cells.SpecialCells(xlCellTypeLastCell).Row > 3 Then
.Range(.Rows(4), .Rows(.Cells.SpecialCells(xlCellTypeLastCell).Row)).ClearContents
End If
End With
'daten Kopieren
For SpalteZiel = 1 To wksZiel.Cells(3, wksZiel.Columns.Count).End(xlToLeft).Column
For SpalteOrig = 1 To wksOrig.Cells(3, wksOrig.Columns.Count).End(xlToLeft).Column
If wksZiel.Cells(3, SpalteZiel).Value = wksOrig.Cells(3, SpalteOrig).Value Then
With wksOrig
.Range(.Cells(1, SpalteOrig), .Cells(.Rows.Count, SpalteOrig)).Copy _
Destination:=wksZiel.Cells(1, SpalteZiel)
End With
End If
Next
Next
'originaldatei wieder schliessen
wbOrig.Close savechanges:=False
End Sub


Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
25.05.2009 09:47:28
Andreas
Hallo Franz,
danke für die Antwort. Sorry wenn ich erst jetzt antworte. Ich habe keine Email erhalten, daß ein Beitrag eingegangen ist :-(. Eine Frage habe ich noch zu deinem Script.
Mit dem Pfad, Namen ist soweit klar. Wo aber definiere ich genauer, welche Spalten er kopieren soll? Angenommen ich habe in der Originaldatei die Spalten A-J, aus denen ich nur die Spalte A, D-F, H und J benötige? Da ich keine VBA Kenntnisse habe, kann ich nicht erkennen wo es definiert werden soll bzw. ist :-(.
Grüße aus Karlsruhe
Andreas Müller
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
25.05.2009 11:33:05
fcs
Hallo Andreas,
du hattest ja geschrieben, das in der Zeile 3 der Spalten jeweils eindeutige Begriffe stehen.
Die Einträge in Zeile 3 der Zieltabelle werden mit den Einträgen in der Zeile 3 der Originaltabelle verglichen. Stimmen die Einträge überein, dann wird der Inhalt der entsprechenden Spalte aus dem Original ins Ziel kopiert.
Wenn du die zu kopierenden Spalten fest vorgeben willst, dann muss man das Kopieren etwas anders aufbauen.

'daten Kopieren
SpalteZiel = 0
For SpalteOrig = 1 To 10 'Spalten A bis J prüfen
Select Case SpalteOrig
Case 1, 4 To 6, 8, 10
'Spalten A, D-F, H und J kopieren
SpalteZiel = SpalteZiel + 1
With wksOrig
.Range(.Cells(1, SpalteOrig), .Cells(.Rows.Count, SpalteOrig)).Copy _
Destination:=wksZiel.Cells(1, SpalteZiel)
End With
Case Else
'do nothind
End Select
Next


Gruß
Franz

Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
25.05.2009 16:37:17
Andreas
Hallo Franz,
okay es funktioniert soweit. Was ich "vergessen" habe zu fragen waren 3 Dinge.
1.)
Wie kann man das mit mehreren Tabellenblättern (in meinem Fall 7) regulieren. Ändert sich dann nur die Zeile
Set wksZiel = wbZiel.Worksheets(1) auf Set wksZiel = wbZiel.Worksheets(7)
damit er die Tabellenblätter abgleicht, sofern die Namen der Worksheets übereinstimmen, oder muss man da mit absoluten Bezügen schaffen also Namen der Tabellenblätter.
2.)
Weiterhin kann ich das Makro ja nur ausführen, wenn ich es in einer separaten Datei abspeichere, oder geht das auch "eleganter", da die Dateien ja geschlossen sein müssen?
3.)
Bei einem von 7 Tabellenblättern stehen die absoluten Bezüge schon in Zeile 1 und nicht in Zeile 3. Da ich mir vorstellen kann, daß es für das Makro erheblich mehr Aufwand ist, dies im Code zu integrieren, wäre ein Ausschließen des besagten Tabellenblattes einfacher oder ein 2. Makro laufen lassen mitr geänderten Bezügen?
Danke für deine fachmännische Unterstützung.
Gruß Andreas
Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
25.05.2009 20:06:06
fcs
Hallo Andreas,
zu Frage 1:
wenn die Reihenfolge der Tabellenblattregister in Original- und Zielmappe identisch ist dann kannst du mit den Nummer arbeiten. Es empfiehlt sich aber meistens, wenn die Namen in beiden Mappen vorkommen, die Tabellen des Originals nach den Nummern abzuarbeiten und als Zieltabelle die Tabelle in der Zielmappe mit dem gleichen Namen festzulegen.
zu Frage 2:
Ob eine Lösung eleganter ist hängt ja davon ab wie du vorgehen möchtest und was du erreichen willst. Manchmal will man die Datendateien ja auch Makrofrei halten, dann muss man die Makros extern speichern.
Du kannst das Makro auch in der Ziel- oder Originaldatei speichern. Dann muss die Objektvariable wbZiel bzw. wbOrig anders gesetzt werden.
Beispiel bei speichern des Makros in Zieldatei:

Set wbZiel = ThisWorkbook
statt
Set wbZiel = Workbooks.Open(Filename:="C:\Lokale Daten\Test\Mappe1.xls")


Frage 3:
Mehrere Tabellenblätter kannst du in einer Schleife abarbeiten.
Abhängig von der Nummer oder dem Namen des Tabellenblatts setzt du dann auch die Zeile in der die absoluten Adressen stehen.
Gruß
Franz
Beispiel mit Abarbeiten in Schleife


Sub DatenausOriginalHolen3()
Dim wbOrig As Workbook, wbZiel As Workbook
Dim wksOrig As Worksheet, wksZiel As Worksheet
Dim SpalteZiel As Long, SpalteOrig As Long
Dim ZeileKey As Long, intI As Long
Set wbZiel = Workbooks.Open(Filename:="C:\Lokale Daten\Test\Mappe1.xls")
Set wbOrig = Workbooks.Open(Filename:="C:\Lokale Daten\Test\Original.xls", _
ReadOnly:=True)
For intI = 1 To wbOrig.Worksheets.Count
Set wksOrig = wbOrig.Worksheets(intI)
Select Case wksOrig.Name 'Abfrage über Namen der Tabelle
'    Select Case wksOrig.Index 'Abfrage über Index-Nummer der Tabelle
Case "Tabelle1"  'name ggf. anpassen
'      Case 1  'Nummer ggf. anpassen
ZeileKey = 1
Case Else
ZeileKey = 3
End Select
Set wksZiel = wbZiel.Worksheets(wksOrig.Name)
'Daten im Zielblatt unterhalb Keyzeile löschen
With wksZiel
If .Cells.SpecialCells(xlCellTypeLastCell).Row > ZeileKey Then
.Range(.Rows(ZeileKey + 1), .Rows(.Cells.SpecialCells(xlCellTypeLastCell).Row)). _
ClearContents
End If
End With
'daten Kopieren
For SpalteZiel = 1 To wksZiel.Cells(ZeileKey, wksZiel.Columns.Count).End(xlToLeft).Column
For SpalteOrig = 1 To wksOrig.Cells(ZeileKey, wksOrig.Columns.Count).End(xlToLeft).Column
If wksZiel.Cells(ZeileKey, SpalteZiel).Value = wksOrig.Cells(ZeileKey, SpalteOrig). _
Value Then
With wksOrig
.Range(.Cells(1, SpalteOrig), .Cells(.Rows.Count, SpalteOrig)).Copy _
Destination:=wksZiel.Cells(1, SpalteZiel)
End With
End If
Next
Next
Next intI
'originaldatei wieder schliessen
wbOrig.Close savechanges:=False
End Sub


Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
25.05.2009 22:35:10
Andreas
Hallo Franz,
okay werde die Vorschläge morgen versuchen umzusetzen.
Zum Teil/Frage 1 bzw. 3 habe ich allerdings noch eine Nachfrage. Die 2 Dateien, die abgeglichen werden sollen, da hat die Originaldatei 12 Tabellen, wovon aber nur 7 für die Zieldatei relevant sind. Die Namen der Tabellenblätter sind auch in beiden gleich, also übereinstimmend in der Quell und Zieldatei. Die Anordnung der Tabellenblätter kann ich anordnen was die Reihenfolge angeht.
Dann müsste ich laut deiner Darstellung die 7 wichtigen Tabellen in der Originaldatei anordnen unter 1-7. In der Zieldatei dito. Werden die dann in der Zeile
--> Case "Tabelle1" 'name ggf. anpassen oder bei Zahlennutzung Case 1 'Nummer ggf. anpassen
alle miteinander angegeben? Vielleicht kannst du mir da noch eine kleine Hilfestellung leisten weil Verständnisproblem.
Ich hoffe die Frage einigermaßen verständlich gestellt zu haben.
Danke und Gruß
Andreas
Anzeige
AW: Daten in andere Datei üebrtragen-Netzlaufwerk
26.05.2009 09:17:30
fcs
Hallo Andreas,
in diesem Fall ist es dann besser die Tabellen in der Zieldatei als Basis abzuarbeiten und dann immer die entsprechende Tabelle aus der Originaldatei zu wählen.
Hierzu muss dann die For-Schleife entsprechend umgestellt werden.

For intI = 1 To wbZiel.Worksheets.Count
Set wksZiel = wbZiel.Worksheets(intI)
Select Case wksZiel.Name 'Abfrage über Namen der Tabelle
'    Select Case wksZiel.Index 'Abfrage über Index-Nummer der Tabelle
Case "Tabelle1"  'name ggf. anpassen
'      Case 1  'Nummer ggf. anpassen
ZeileKey = 1
Case Else
ZeileKey = 3
End Select
Set wksOrig = wbOrig.Worksheets(wksZiel.Name)


Gruß
Franz

Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige