Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Inhalte von Datei zu Datei kopieren mit Schleifen Makro

Frage Microsoft Microsoft Office

Mitglied: Shaggy84

Shaggy84 (Level 1) - Jetzt verbinden

23.04.2008, aktualisiert 29.04.2008, 6055 Aufrufe, 4 Kommentare

Hallo Administrator Forum Team,

wieder einmal stehe ich vor einem kleinem Problem.

Ich kopiere Tabelleninhalte von einer Quelldatei in meine Zieldatei. Dies funktioniert soweit.

Jetzt aber die beiden Schleifenpunkte, die noch nicht funktionieren:
- in der Quelldatei können es mehrere Tabellen sein, deren Inhalt ich kopieren will (immer ab der ersten)
- in der Zieltabelle möchte ich alle Werte untereinander stehen haben

[j ist die Anzahl der Tabellen, die ich aus der Quelldatei importieren möchte. k = 1]

01.
Do Until k = j + 1 
02.
 
03.
    'Inhalte kopieren 
04.
    Worksheets(k).Range("8:65535").Copy 
05.
 
06.
    'Inhalte einfügen 
07.
    If Ziel.Worksheets(2).Cells(1, 1) = "" Then 
08.
    Ziel.Worksheets(2).Range("1:65535").PasteSpecial _ 
09.
    Paste:=xlPasteValues 
10.
    Else 
11.
    Letzte = IIf(IsEmpty(Ziel.Worksheets(2).Range("E65536")), Ziel.Worksheets(2).Range("E65536").End(xlUp).Row + 1, 65536) 
12.
    'ab hier funktioniert es nicht mehr 
13.
    Ziel.Worksheets(2).Cells(Letzte, 1).PasteSpecial _ 
14.
    Paste:=xlPasteValues 
15.
    End If 
16.
 
17.
    k = k + 1 
18.
 
19.
Loop
Ich habe das Gefühl, als ob mein Programmablauf nach einem Durchgang, nicht mehr in die Quelldatei zurück wechselt. Wie kann ich dieses Problem lösen?

Außerdem kopiert er nicht unter meine bestehenden Daten hinzu. Es passiert einfach nichts, wenn ich den Programmablauf noch einmal von vorne mit einer anderen Datei starte. Woran kann dies liegen?

Grüße
Mitglied: bastla
23.04.2008 um 15:42 Uhr
Hallo Shaggy84!

Einmal abgesehen von der etwas abenteuerlichen Schleife (wenn Du die Anzahl der Tabellen kennst und diese schon unbedingt in einer Variable "j" speichern musst, wäre zumindest eine Zählschleife der Art
01.
For k = 1 To j 
02.
... 
03.
Next
die üblichere Schreibweise, ansonsten aber wenigstens "Do While k <= j"), gibt es zwei echte Probleme:

Zunächst hast Du zwar für die Zielmappe eine Variable ("Ziel") verwendet, nicht aber für die Quelle - falls das Makro aus der Quellmappe heraus gestartet wird, könntes Du das etwa so nachholen
01.
Set Quelle = ThisWorkbook
und dann vor dem jeweilgen Kopiervorgang ein
01.
Quelle.Worksheets(k).Activate
einbauen.

Außerdem wird es Dir (ein Excel < 2007 vorausgesetzt) auch von Hand nicht gelingen, in einer Tabelle 65528 Zeilen (wieso sparst Du eigentlich die Zeile 65536 aus?) zu markieren und diese in einer anderen Tabelle zB ab Zeile 200 wieder einzufügen - insofern wird es nötig sein, den zu kopierenden Bereich in der Quellmappe einzugrenzen, etwa mit
01.
Range("A8", ActiveCell.SpecialCells(xlLastCell)).Copy
Schließlich könntest Du dann noch (der Ordnung halber) nach der Schleife den (eigentlich noch offenen) Kopiervorgang mit
01.
Application.CutCopyMode = False
abbrechen ...

Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
24.04.2008 um 09:20 Uhr
Hallo bastla und andere,

danke für die Hinweise. Ja meine Schleife war komisch, suchte auch dieses "For times".

Dann das mit der letzten benutzten Zelle, jap, das suchte ich auch und fand es nicht. Danke

Jetzt kommen die Probleme:
Zuerst, ich starte das Makro aus der Zieldatei heraus und möchte die Quelldatei daraus öffnen und Daten kopieren. Das klappte schon das ein oder andere mal, jetzt leider wieder nicht.

Ab dem Code mit der letzten benutzten Zelle
01.
Range("A8", ActiveCell.SpecialCells(xlLastCell)).Copy
erscheint der Laufzeitfehler 424 Objekt nicht gefunden?!

Debuggen kann ich meinen Code leider nicht, da mein Excel dann abstürzt. (Evt. wegen Makro in der anderen Datei.). Hab's nur mit "On Error Resume Next" einkreisen können.

Wenn ich aber anstatt sowohl in dem Kopier- als auch Einfügebereich (jetzt vereinfacht)
01.
Range("A1") 'oder Range("1:65535")
anstatt
01.
Range(Cells(1, 1)) 'oder andere Zellverweise
benutze, funktioniert es wieder. Nur damit kann man ja nicht flexibel arbeiten.

Ich hab hier noch einmal den Code Auszug, der für das kopieren wichtig ist komplett (j=1)
01.
Sub Source_File_Import() 
02.
 
03.
Application.ScreenUpdating = False  
04.
Application.DisplayAlerts = False  
05.
Application.CutCopyMode = False 
06.
Application.StatusBar = "Achtung! - Makro läuft" 
07.
Dim app As New Excel.Application 'für Autovervollständigung 
08.
 
09.
Dim Letzte As Long 
10.
Dim i As Integer 'für Abbruchbedingung beim Datei Laden 
11.
Dim Ziel As Workbook 
12.
Set Ziel = ThisWorkbook 'für Zielbestimmung 
13.
Dim j As Integer 'für Anzahl der Tabellenblätter der Quelle 
14.
j = Ziel.Worksheets(1).Cells(9, 9).Value 
15.
Dim k As Integer 'für Zähler 
16.
k = 1 
17.
 
18.
'Datei öffnen 
19.
i = Application.Dialogs(xlDialogOpen).Show 
20.
If i = 0 Then 
21.
Application.StatusBar = "" 
22.
Exit Sub 
23.
End If 
24.
 
25.
For k = 1 To j 
26.
 
27.
    'Inhalte kopieren 
28.
    Worksheets(k).Activate 
29.
    Worksheets(k).Range("A8", ActiveCell.SpecialCells(xlLastCell)).Copy 
30.
 
31.
    'Inhalte einfügen 
32.
    If Ziel.Worksheets(2).Cells(1, 1) = "" Then 
33.
    Ziel.Worksheets(2).Range(Cells(1, 1)).PasteSpecial _ 
34.
    Paste:=xlPasteValues 
35.
    Else 
36.
    Letzte = IIf(IsEmpty(Ziel.Worksheets(2).Range("E65536")), Ziel.Worksheets(2).Range("E65536").End(xlUp).Row + 1, 65536) 
37.
    Ziel.Worksheets(2).Range(Cells(Letzte, 1)).PasteSpecial _ 
38.
    Paste:=xlPasteValues 
39.
    End If 
40.
 
41.
Next k 
42.
 
43.
'...... 
44.
 
45.
Application.StatusBar = "" 
46.
Application.ScreenUpdating = True 
47.
Application.DisplayAlerts = True 
48.
Application.CutCopyMode = True 
49.
 
50.
End Sub
Woran kann's noch hapern?

Außerdem als Idee zum zurück wechseln in die Quelldatei nach einem Schleifendurchlauf war
01.
Dim Quelle As Workbook 
02.
i = Application.Dialogs(xlDialogOpen).Show 
03.
Set Quelle = ActualWorkbook 
04.
'.... 
05.
Quelle.Worksheets(k).Activate
Das klappte aber leider noch nicht...

Ich bin für jede Idee dankbar
Bitte warten ..
Mitglied: bastla
24.04.2008 um 12:24 Uhr
Hallo Shaggy84!

Deine "Idee zum zurück wechseln in die Quelldatei" wäre auch meine, allerdings sollte die "Set"-Zeile lauten:
01.
Set Quelle = ActiveWorkbook
Hinsichtlich des zu kopierenden Bereiches: Gibt es vielleicht eine Spalte (für das Beispiel unten Spalte A), die in jeder Zeile einen Wert enthält (zB eine laufende oder Artikel-Nr etc) - dann würde ich dort ansetzen und die letzte Zeile so suchen:
01.
k = 8 
02.
Do While Cells(k, "A").Value <> "" 
03.
    k = k + 1 
04.
Loop 
05.
LetzteZeile = k - 1
Grüße
bastla
Bitte warten ..
Mitglied: Shaggy84
29.04.2008 um 10:53 Uhr
Hallo bastla,

vielen Dank für die Hilfe. Leider kann ich nicht sagen, ob ein Einladen mehrerer Worksheets direkt nacheinander funktioniert. Ich lade Dateien ein, die selber Autostart Makros haben, und die machen mir in diesem Fall das Leben schwer. Diese einzeln über eine Variable nacheinander zu laden funktioniert allerdings.

Die anderen Punkte sind aber verbaut und funktionieren wunderbar. Danke nochmals.


Shaggy
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Ordner per Batch verschieben, Datei kopieren (2)

Frage von Shape.Shifter zum Thema Batch & Shell ...

C und C++
gelöst In einer Windows Form Anwendung per Button eine Datei kopieren (4)

Frage von Knuefi zum Thema C und C ...

Batch & Shell
gelöst Powershell Datei kopieren mit ACL Script funktioniert nicht (4)

Frage von xpxy15 zum Thema Batch & Shell ...

Batch & Shell
Batch: Word Datei kopieren und umbennen (9)

Frage von ExcelNoob177 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...