Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1156to1160
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 von Quell- in Zieldatei kopieren ohne doppel

Daten von Quell- in Zieldatei kopieren ohne doppel
Quell-
Hallo,
mein Name ist Stefan, ich habe am 2010-05-20 20:13:15 einen Beitrag unter dem gleichen Betreff geschrieben (Archiv-IDX 1158172) und habe von Steffen freundlicherweise eine Antwort bekommen, in der er mich gebeten hat gegebenenfalls Mappen hochzuladen. Ich möchte dies nun tun und zwei beispiele hochladen.
https://www.herber.de/bbs/user/69802.xlsx
https://www.herber.de/bbs/user/69803.xlsx
Noch einmal kurz das Problem:
ich habe mehrere Arbeitsmappen (Quelldateien, z. Bsp. GSZ_Preisfindung.xls), die ständig befüllt werden. Die jeweils neuen Daten sollen durch markieren und dann klicken auf einen Button in eine andere Arbeitsmappe (Zieldatei, GSZ_2010.xls), die sich im Hintergrund öffnet und nach dem hineinkopieren wieder schließt, hineinkopiert (angehängt) werden. Die Dateien haben allesamt die gleiche Struktur. Die schon vorhandenen Zeilen in den Queldateien können sich durch nachträgliche Einträge verändern mit Ausnahme von Spalte B. Der Eintrag in Spalte B ist eine eindeutige Kennnummer und darf nicht doppelt vorkommen. Es soll also zu der bisherigen Funktionalität noch überprüft werden, ob die vom Anwender markierten und zu kopierenden Daten schon eimal mit der gleichen Kennnummer in Spalte B vorhanden sind. Sollte dies der Fall sein, dann sollen diese Daten durch die neu einzufügenden, sozusagen aktuellen, ersetzt und andernfalls wie gehabt angehängt werden. Ich hoffe ich habe mich deutlich ausgedrückt. Ist dies möglich? Hintergrund ist, schon vorhandene Datensätze können sich in den Quelldateien jederzeit verändern, außer eben in Spalte B. Diese Veränderungen sollen immer auf dem neuesten Stand sein ohne , daß in Spalte B doppelte einträge vorkommen.
Der Mitarbeiter Steffen hat mir dankbarerweise folgenden Code geschrieben:
Sub myCopy4()
Dim objXLApp As Excel.Application
Dim objXLABC As Excel.Workbook
Dim objXLWorkbooks As Excel.Workbooks
Dim neuWkb
Dim lngLastRow As Long
Dim mySelection()
Dim myCounter()
Dim i As Long
Dim x As Long
Dim n As Long
Dim mysearch
Dim mySearchRow As Long
mySelection = Selection
ReDim myCounter(1 To UBound(mySelection, 1), 1 To UBound(mySelection, 2))
For i = LBound(mySelection, 1) To UBound(mySelection, 1)
For x = LBound(mySelection, 2) To UBound(mySelection, 2)
myCounter(i, x) = mySelection(i, x)
Next x
Next i
Set objXLApp = New Excel.Application
Set objXLWorkbooks = objXLApp.Workbooks
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set objXLABC = objXLWorkbooks.Open("C:\Stefan\Mappe2.xls")
neuWkb = objXLABC.Name
With objXLWorkbooks(neuWkb).Sheets(1)
lngLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
For i = LBound(mySelection, 1) To UBound(mySelection, 1)
For x = LBound(mySelection, 2) To UBound(mySelection, 2)
Set mysearch = .Range("B1:B" & lngLastRow).Find(myCounter(i, 2), lookat:=xlWhole)
If Not mysearch Is Nothing Then
mySearchRow = mysearch.Row
.Cells(mySearchRow, x) = myCounter(i, x)
Else
n = .Cells(.Rows.Count, x).End(xlUp).Row
.Cells(n + 1, x) = myCounter(i, x)
End If
Next x
Next i
End With
objXLWorkbooks(neuWkb).Close savechanges:=True
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
Set objXLApp = Nothing
Set objXLWorkbooks = Nothing
End Sub

Leider funktioniert er bei mir noch nicht. Die Reaktion des Programms ist folgende: Es erscheint nur die Sanduhr, die ja anzeigt, daß der Rechner tätig ist, das dauert so lange bis ich mit ESCAPE unterbreche. Dann erscheint ein Fenster mit 3 Auswahlmöglichkeiten, unter anderem der Möglichkeit "Debuggen". Wenn ich darauf klicke erscheint ein gelber Pfeil und die oben markierte Textstelle wird gelb unterlegt (mySearchRow = mySearch.Row).
Ich hoffe ich habe mich verständlich ausgedrückt. Kann mir jemand damit helfen?
Mit freundlichen Grüßen
Stefan
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
30.05.2010 13:33:23
Quell-

Hallo Stefan,
das geht z.B. so.
https://www.herber.de/bbs/user/69805.xlsm
Im Code den Pfad und Dateinamen zur Zieldatei anpassen!

Gruß Sepp

AW: Daten von Quell- in Zieldatei kopieren ohne doppel
30.05.2010 20:43:09
Quell-
Hallo,
ich werde es ausprobieren und morgen so schnell wie möglich Nachricht geben. Auf jeden Fall Herzlichen Dank für die Hilfe. Auch an die Kollegen, die mir schon geholfen haben. Ich bin aufs angenehmste überrascht wie schnell das hier geht.
Herzliche Grüße
Stefan
Anzeige
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
31.05.2010 07:42:18
Quell-
Hallo,
ich nutze Excel 2007.
ich habe den Code ausprobiert und funktioniert leider nicht, gibt aber auch keine Fehlermeldung, es tut sich einfach nichts. Vielleicht auch nochmal der Hintergrund:
Es gibt mehrere Quelldateien, die in einer Zieldatei zusammengefaßt werden sollen. Alle Dateien haben die gleiche Struktur. Die Quelldateien werden ständig von verschiedenen Anwendern befüllt. Die Zieldatei soll auf dem aktuellen Stand gehalten werden, indem in den Quelldateien die aktuell von den Anwendern eingetragenen Daten markiert werden und per click auf einen Button, in die Zieldatei, die sich im Hintergrund öffnet und nach dem Kopiervorgang wieder schließt, kopiert (angehängt) werden. Der Anwender soll mit der Ziedatei selbst gar nicht mehr in Berührung kommen. Kompliziert macht die Sache, daß in den Quelldateien schon vorhandene Datensätze auch verändert werden können, mit Ausnahme von Spalte B. In Spalte B steht eine eindeutige Kennnummer, die weder in Quell- noch in Zieldatei doppelt vorkommen darf. Diese nachträglichen Änderungen (z. Bsp. in Spalten V bis AI) sollen aber auch in der Zieldatei aktualisiert werden. Dabei habe ich nur eine Idee: In der Zieldatei soll in Spalte B überprüft werden, ob die in der Quelldatei vom Anwender markierten Datensätze (Zeilen) in Spalte B schon einmal vorkommen und 1. falls ja dann die entsprechende Zeile in der Zieldatei mit dem aktuellen Datensatz (also mit der aktuellen Änderung) überschreiben oder aber möglich ist auch den schon in der Zieldatei vorhandenen Datensatz (sprich bei gleichem Eintrag in Spalte B) zu löschen und den aktuellen anzuhängen, und 2. falls nein, dann einfach wie gehabt in der Zieldatei anhängen.
Ich hoffe ich bin nicht zu penetrant mit meinem Problem.
Viele Grüße
Stefan
Anzeige
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
31.05.2010 11:28:28
Quell-
Hallo Stefan,
Sepp's Lösungen funktionieren fast immer. Ich tippe also auf ein Verständnisproblem bei der Umsetzung.
Ich hab hier kein Excel 2007.
Hier mein in der Praxis bewährtes Makro, etwas an deine Datei angepasst.
Dieses Makro muss bei jedem Anwender eingerichtet werden. Entweder in der Quelldatei oder in der persönlichen Makroarbeitsmappe. Da du mit Buttonklicks arbeiten willst empfehle ich das Makro in einem allgemeinen Modul der Quelldateien einzurichten.
Im Eingabeblatt der Quelldateien fügst du dann eine Schaltfläche aus den Formular-Steuerelementen ein. Dieser wird dann das Makro zugewiesen.
Weitere Vorraussetzung ist natürlich, dass alle Anwender Zugriffsberechtigung (Lesen+Ändern) zur Sammeldatei haben - z.B. auf ein Netztlaufwerk.
Die Sammeldatei sollte so eingerichtete werden, dass sie normalerweise schreibgeschützt geöffnet wird. So werden versehentliche manuelle Änderungen in der Sammeldatei verhindert.
Gruß
Franz
Option Explicit
Sub Daten_in_Sammler()
Dim wksQuelle As Worksheet
Dim rngRow As Range, rngSelektion As Range
Dim wbSammler As Workbook, wksSammler As Worksheet, rngZelle As Range
Dim vKey As Variant, lZeile As Long
'Spalte mit eindeutgem Schlüssel = Spalte B
Const SpalteKey As Long = 2
'Dateiname der Sammeldatei                                    -  anpassen !
Const sNameSammler As String = "\\a000b0001\Test$\DataSammler.xls"
'Blattname oder Nr des Tabellenblatts in Sammeldatei      - ggf. anpassen !
Const vBlattSammler = 1
On Error GoTo Fehler
'Quellblatt und Zell-Selektion Objekt-Variablen zuweisen
Set wksQuelle = ActiveSheet
Set rngSelektion = Selection
'1. Zeile des selektierten Bereichs prüfen
If rngSelektion.Row  Sammeldatei") = vbNo Then GoTo Beenden
'Bildschirmaktualisierung und Ereignismakros deaktivieren
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Sammeldatei öffnen
Set wbSammler = Workbooks.Open(Filename:=sNameSammler, Ignorereadonlyrecommended:=True)
Set wksSammler = wbSammler.Worksheets(vBlattSammler)
'Keys der Selektion in Sammeldatei suchen und Zeilen kopieren
For Each rngRow In rngSelektion.Rows
vKey = wksQuelle.Cells(rngRow.Row, SpalteKey).Value
Set rngZelle = wksSammler.Columns(SpalteKey).Find(What:=vKey, LookIn:=xlValues, _
lookat:=xlWhole)
With wksSammler
If rngZelle Is Nothing Then
'Neuer Schlüssel
lZeile = .Cells(.Rows.Count, SpalteKey).End(xlUp).Row + 1
Else
'vorhandener Schlüssel
lZeile = rngZelle.Row
End If
End With
wksQuelle.Rows(rngRow.Row).Copy Destination:=wksSammler.Rows(lZeile)
Next
wbSammler.Close savechanges:=True
Beenden:
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
End Select
End With
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End Sub

Anzeige
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
31.05.2010 17:48:09
Quell-
Hallo Franz,
ich habe deinen Code ausprobiert und funktioniert prima, hat genau die Funktionalität, die ich brauche. Herzlichen Dank, auch nochmal an Sepp und Steffen, die mir auch sehr geholfen haben. Eine Frage hätte ich noch: Kann ich denn in die Quelldateien auch ein ActiveX-Steuerelement einfügen und diesem dann im Entwurfsmodus per Doppelklick in der entsprchenden Tabelle dann den Code zuweisen? Oder ist das nicht so gut?
Herzlichen Dank nochmal an das Team.
Viele Grüße
Stefan
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
01.06.2010 09:53:22
Quell-
Hallo Stefan,
es funktioniert auch mit der Schaltfläche aus den Active-X-Steuerelementen und Doppelklick.
Du solltest die Eigenschaft "TakeFocusOnClick" der Schaltfläche jedoch auf False setzen, damit der Button nicht das selektierte Element wird.
Bei zu langsamem Doppelklick (= 2 Einzelklicks) müssen sonst die Zeilen erneut selektiert werden.
Gruß
Franz
Anzeige
AW: Daten von Quell- in Zieldatei kopieren ohne doppel
31.05.2010 20:19:18
Quell-

Hallo Stefan,
du hast ja den funktionierenden Code von Franz, aber ich habe meinen Code an deinen Tabellen auf xl2007 getestet und er funktioniert.

Gruß Sepp

AW: Daten von Quell- in Zieldatei kopieren ohne doppel
31.05.2010 20:28:00
Quell-
Hallo Sepp,
ja, ich werde ihn auch nochmal ausprobieren. Wahrscheinlich habe ich irgendeinen Fehler gemacht. Sorry. Aber auf jeden Fall Herzlichen Dank für die Hilfe. Auch an die anderen im Team. Es ist wirklich klasse, daß es auch immer sehr fix geht.
Viele Grüße
Stefan
Anzeige

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige