Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
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 einer Schleife kopieren

daten in einer Schleife kopieren
03.07.2014 22:29:52
Toni
Hallo, ich bekomme es wieder mal nicht hin.
Ich möchte in einer Schleife von einer Exceldatei C:/..../.../Quelle.xlsm (C steht für egal wo sie liegt) einzelne verstreute(und Bereiche) Zellen in eine andere Exceldatei D:/.../.../Ziel.xlsx kopieren. Eigentlich einfach denke ich, nicht für mich ;-(
Hier mein Bastelwerk (ich hab wegen der Länge die unwichtigen Zeilen gelöscht).
Public qOrdner As String ' AblagePfad für MeldeListe
Public qDateiname As String ' Dateiname MeldeListe
Public zOrdner As String ' AblagePfad für Zusageliste
Public zDateiname As String ' Dateiname Zusageliste
Public wbMappe As Workbook ' Hilfsvariable
Public wbQ As Workbook 'Quelldatei
Public wbZ As Workbook 'Zieldatei
Sub Startwerte()
qOrdner = ThisWorkbook.Path & "\"   ' Der Meldeordner kann an beliebiger Stelle liegen
qDateiname = ThisWorkbook.Name      ' Die Meldedatei kann beliebig umbenannt werden
zOrdner = "D:\010_PRIVAT\000_MASKEN+Vorlagen\Macros\"    'Mit "\" am Ende !
zDateiname = "Meldeliste_Gesamt.xlsm"                    ' Name der Zusageliste ist hier fest
End Sub
Sub Logistik_Daten_kopieren()'>>>>>>>>>>>>>>>>>dieses Macro starte ich >>>>>>>>>>>>>
'----------------Lokale Variable einrichten-----------------
Dim iZeile As Integer
Dim iWert As Integer
Dim qZelle As String
Dim zZelle As String
Dim Test As Variant
Startwerte
'Quelldatei öffnen
Set wbQ = Workbooks.Open(qOrdner & qDateiname) #####Hier gibt es Probleme
'Zieldatei öffnen
Set wbZ = Workbooks.Open(zOrdner & zDateiname) #####Hier gibt es Probleme - Hier beendet sich  _
der Einzelschritt oder wenn ich den Code ändere ( z.B. mit activate arbeite weil die Dateien ja schon offen sind) geht nix mehr
iZeile = 14 'Erste Zeilen Adresse B14
If Workbooks(qDateiname).Worksheets(1).Cells(iZeile, 2)  Empty Then ' iZeile,2 = Start- _
Zelle-
B14, dann B15, dann  _
B16, usw.
Zeile_in_Datei_einfügen ' fügt eine Leerzeile an Pos. Zeile 8 in Zieldatei
'--Logistikwerte von Meldeliste in Zusageliste kopieren --
For iWert = 1 To 9 ' 9 mal wiederholen da 9 Werte
'----------Quell und Zielzelle adressieren----------
' hier steht noch coder der funktioniert
'--------Werte in Meldeliste kopieren -------------
'--------Zeile B14 bis B29 ------------------------
Workbooks(qDateiname).Worksheets(1).Range(qZelle).Copy
Workbooks(zDateiname).Worksheets(1).Range(zZelle).PasteSpecial Paste:= _
xlPasteValues
Next
'----------------Produktdaten in Meldeliste übernehmen-------------------
####    wbQ.Worksheets(1).Range("B14:L14").Offset(iZeile - 14, 0).Copy  ' Kopiere  _
Meldedaten
####    wbZ.Worksheets(1).Range("N9:X9").Offset(iZeile - 14, 0).PasteSpecial Paste:= _
xlPasteValues
Else
' erste freie Zeile in Meldeliste ohne MLFB erreicht
iZeile = iZeile + 1
End If
Danke wiedermal für Eure Hilfe.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: daten in einer Schleife kopieren
04.07.2014 08:15:36
fcs
Hallo Toni,
wenn eine zusätzliche Prüfung eingebaut wird, ob die Dateien schon geöffnet sind, dann sollte es funktionieren.
Eine Datei kann normalerweise in Excel nicht 2 mal geöffnet werden bzw. es kommt zu einem Datenverlust.
Gruß
Franz
'Quelldatei öffnen
'prüfen, ob Datei schon geöffnet
For Each wbQ In Application.Workbooks
If LCase(wbQ.Name) = LCase(qDateiname) Then
Exit For
End If
Next
If wbQ Is Nothing Then
Set wbQ = Workbooks.Open(qOrdner & qDateiname)
End If
'Zieldatei öffnen
'prüfen, ob Datei schon geöffnet
For Each wbZ In Application.Workbooks
If LCase(wbZ.Name) = LCase(zDateiname) Then
Exit For
End If
Next
If wbZ Is Nothing Then
Set wbZ = Workbooks.Open(zOrdner & zDateiname)
End If

Anzeige
AW: daten in einer Schleife kopieren
04.07.2014 10:44:48
Toni
Hallo Danke für die Antwort. Das mit 2x öffnen habe ich schon mal gelesen, drum habe ich auch mit activate geübt. das ging aber auch schief.
Die Frage ist, wenn ich beide Dateien offen habe, wie kann ich die Mappen einfach wechseln? Muss ich wirklich immer mit öffnen, prüfen und schließen um abwechselnd arbeiten zu können?
Ich verstehe auch nicht warum das alles so einfach geht wenn die Mappen im gleichen Pfad liegen und warum das alles so umständlich ist wenn die Pfade anders lauten. Warum kann ich den Pfad nicht einfach vor den Dateinamen hängen?
Ich hab bisher auch keine Erklärung in meinen Büchern gefunden die meinen Fragen beantworten.

Anzeige
AW: daten in einer Schleife kopieren
04.07.2014 11:42:24
fcs
Hallo Toni,
Die Frage ist, wenn ich beide Dateien offen habe, wie kann ich die Mappen einfach wechseln?
Über die Objektvariablen wbQ und wbZ kannst du zwischen den Dateien wechseln.
wbQ.Activate
wbZ.Activate
um eine der Mappen zur aktiven Mappe zu machen.
Zum Kopieren von Daten von der Quelle ins Ziel musst du aber nicht die Mappen wechseln.
Entweder - Kopieren inklusive Formeln, Formaten
wbQ.Sheets(1).Range("A2").Copy Destination:=wbZ.Sheets(1).Cells(ZeileZ,1)
oder - Kopieren nur Werte
wbQ.Sheets(1).Range("A2").Copy
wbZ.Sheets(1).Cells(ZeileZ,1).PasteSpecial Paste:=xlPasteValues
oder - direkte Wertzuweisung
wbZ.Sheets(1).Cells(ZeileZ,1).Value = wbQ.Sheets(1).Range("A2").Value
Für eine effektive Programmierung deklariert man sich hier aber am besten auch noch Objekt-Variablen für Quell- und Zieltabellenblatt.
Dim wksQ as Worksheet, wksZ as worksheet
set wksQ = wbQ.Sheets(1)
set wksZ = wbZ.Sheets(1)
Dann verkürzen sich die entsprechendne Anweisungen für das Kopieren nochmals.
z.B.:
wksZ.Cells(ZeileZ,1).Value = wksQ.Range("A2").Value
Muss ich wirklich immer mit öffnen, prüfen und schließen um abwechselnd arbeiten zu können?
Schließen musst du die Dateien nicht, um abwechselnd arbeiten zu können.
Meine Ergänzung zu deinem -nicht funktionierenden- Code sorgt dafür, dass ggf. mit der bereits geöffneten Datei weitergearbeitet wird; ist die Datei noch nicht geöffnet, dann wird sie geöffnet.
Ich verstehe auch nicht warum das alles so einfach geht wenn die Mappen im gleichen Pfad liegen und warum das alles so umständlich ist wenn die Pfade anders lauten.
Wenn alle Dateien im gleichen Pfad (präzieser im aktiven Verzeichnis/Pfad) liegen, dann ist es insoweit einfacher, da man beim Öffnen keinen Pfad angeben muss, weil Excel die zu öffnende Datei im aktiven Verzeichnis sucht, wenn kein Pfad angegeben ist. Alle anderen möglichen Probleme sind unabhängig davon, ob die Mappen im gleichen oder in verschiedenen Pfaden liegen.
Warum kann ich den Pfad nicht einfach vor den Dateinamen hängen?
Grundsätzlich funktioniert das zum Öffnen auch so.
Wenn die Datei aber schon geöffnet sein kann, dann muss man prüfen und dafür braucht man den Dateinamen ohne Pfad. Dazu muss man nicht unbedingt den Dateinamen in einer eigenen Variablen verwalten; man könnte zum Prüfen auch per Funktion "InstrRev" den Text nach dem letzten "\" im Pfad ermitteln. Mit separaten Variablen für Verzeichnis und Dateiname wird es aber meist übersichtlicher.
Du hast dir aber auch das Leben hier selbst etwas schwer gemacht durch die Anpassung eines wahrscheinlich bereits vorhandenen Codes.
Bei dir ist ja die Datei in der das Makro steht (ThisWorkbook) die Quelldatei.
Statt
'Quelldatei öffnen
'prüfen, ob Datei schon geöffnet
For Each wbQ In Application.Workbooks
If LCase(wbQ.Name) = LCase(qDateiname) Then
Exit For
End If
Next
If wbQ Is Nothing Then
Set wbQ = Workbooks.Open(qOrdner & qDateiname)
End If
kannst du vereinfachen zu
'Quelldatei setzen
Set wbQ = ThisWorkbook
Gruß
Franz
Anzeige

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige