Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Daten aus anderen Excel-Sheets kopieren
#11
Hallo David,

theoretisch wäre das deine Code um die Daten zu kopieren.

Allerdings ... und das ist ein Problem, weiß ich nicht, wie Excel erkennen kann, welche der Dateien nun Datei1 und welche Datei4 ist.
Erzähle mal was dazu ...

Code:
Option Explicit

Sub Komplett()
Dim i As Byte
Dim Datei(1 To 4)
Dim UE As Worksheet
Dim Pfad As String

Const Pfad = "C:\1\" ' <-- anpassen

Set UE = ThisWorkbook.Worksheets("Übersicht")

'*** Problem: wie erkennt Excel welche
'*** Datei welche der Dateien sein soll
Datei(1) = Datei1 ' ??
Datei(2) = Datei2 ' ??
Datei(3) = Datei3 ' ??
Datei(4) = Datei4 ' ??

For i = 1 To 4
    Workbooks.Open Datei(1)
    With Datei(i)
        With Worksheets(1)
            .Range("C4:C13").Copy UE.Range("B2").Offset(0, i - 1)
            .Range("C22:C39").Copy UE.Range("B14").Offset(0, i - 1)
            .Range("D22:D39").Copy UE.Range("B35").Offset(0, i - 1)
            .Range("E22:E39").Copy UE.Range("B56").Offset(0, i - 1)
            .Range("C46:C67").Copy UE.Range("B77").Offset(0, i - 1)
            .Range("E46:E67").Copy UE.Range("B102").Offset(0, i - 1)
        End With
       
        With Worksheets(2)
            .Range("B2:B77").Copy UE.Range("I2").Offset(0, i - 1)
            .Range("C2:C77").Copy UE.Range("O2").Offset(0, i - 1)
        End With
    End With
    Workbooks(Datei(1)).Close Savechanges:=False
Next i
End Sub
Zitieren
#12
Hallo Sabina, 

Vorab vielen Dank für deine Mühe! 

Das Problem an den 4 Dateien ist, dass die immer unterschiedlich benannt sind. Und zwar werden die einzelnen Dateien immer mit dem jeweiligen Datum benannt. 
Weißt du, ob es eine Möglichkeit gibt, dass quasi immer festgelegt ist das Datei 1 die erste Datei kopiert wird die im Ordner ist, egal wie die benannt wird? Datei 2 ist dann immer die zweite usw? Verstehst du wie ich das meine? 

LG
David
Zitieren
#13
Hallo David,

gibt es feste Ordner, in denen die auszuwählenden Dateien liegen ?

Falls ja ... warum soll nicht Excel fragen, welche Datei kopiert werden soll ? Big Grin

Ist doch egal, wie du die Dateien angibst ... oder ?

Selbst aussuchen, oder von Excel gefragt werden ... der Datei-Explorer wäre derselbe.

Wenn aber Excel die Auswahl steuert, kann frau die ausgewählte Datei kopieren und unter beliebigem Namen speichern.

Wäre das so machbar ... oder spricht da etwas dagegen ?
Zitieren
#14
Hallo Sabina,

das Problem ist, dass es aktuell noch gar nicht genau klar ist bezüglich dem Ordner.
Ich gehe allerdings davon aus, dass es immer einen festen Ordner geben wird, in welchem sich alles abspielt.

Deine Frage mit:" warum soll Excel nicht fragen, welche Datei kopiert werden soll" verstehe ich nicht ganz.

Meinst du damit, dass ein Fester aufpoppen soll, in welchem man die entsprechende Datei auswählt? 
Hänge dir mal einen Screenshot davon an, was ich genau meine.

So eine Lösung habe ich schon, allerdings kam dann der Wunsch danach, dass man quasi den Ordner auslesen soll nach welchen
Dateien in dem Ordner sind und man diese dann auf eine Variable in VBA programmiert und es diese Dateien kopiert.

Vielleicht kannst du mir deinen Vorschlag mal mit einem Screenshot bzw. Datei näher erläutern.

Danke!

LG 
David


Angehängte Dateien Thumbnail(s)
   
Zitieren
#15
(10.07.2019, 19:47)Flotter Feger schrieb: Hallo David,

theoretisch wäre das deine Code um die Daten zu kopieren.

Allerdings ... und das ist ein Problem, weiß ich nicht, wie Excel erkennen kann, welche der Dateien nun Datei1 und welche Datei4 ist


Hallo Sabina,

nochmals danke für den Code! 
Habe die Datei 1-4 nun mal fix im Code festgelegt und kleine Abänderungen bezüglich den Pfaden usw vorgenommen und versucht und er funktioniert soweit ganz gut, bis auf kleine Fehler hinsichtlich den Daten wo diese hinkopiert werden.

Habe nun noch eine Frage:

Aktuell werden noch die kompletten Zellen, sprich mit Formel kopiert, was allerdings nicht möglich ist.
Was muss ich abändern, damit "nur" die einzelnen Werte aus der Zelle kopiert werden?

LG
David
Zitieren
#16
Hallo David,

Zitat:So eine Lösung habe ich schon, allerdings kam dann der Wunsch danach, dass man quasi den Ordner auslesen soll ...


Bevor ich hier weitermache, solltest du erst abklären, was jetzt werden soll.
Das mit ... einfach mal 4 Dateien in einen Ordner ziehen und Excel sucht sich dann selbst was aus ... kannst du von meiner Seite vergessen.

Ist machbar, aber viel zu kompliziert ... viel zu fehleranfällig. Kriegst du von mir nicht.
Ich bin eher für einfache, strukturierte Sachen zu haben, mit denen jeder klarkommt, weil es Basics verwendet, die Excel ohne langes Herumtun schon kann ... zumindest dann, wenn ich nicht dafür bezahlt werde. Rolleyes 

PS: mein Code hat genau die Daten umgestellt, wie es in der Musterdatei gezeigt war, sollte da etwas nicht gepasst haben, sorry.
bis .Copy bleibt es gleich, nur die Values einzufügen ... müssten die Zeilen so geändert werden ...

.Range("C4:C13").Copy : UE.Range("B2").PasteSpecial xlPasteValues
Zitieren
#17
Hallo,

wieso per PN ? gehört doch zum Thread ? Dodgy 

versuch es mal so ...
Code:
Option Explicit

Sub Komplett()
Dim i As Byte
Dim Ordner1 As String
Dim Ordner2 As String
Dim Datei As Variant
Dim WB As Workbook
Dim UE As Worksheet

Ordner1 = "C:\1\" ' <-- anpassen
Ordner2 = "C:\2\" ' <-- anpassen

Set UE = ThisWorkbook.Worksheets("Übersicht")

For i = 1 To 4
    ChDrive "C:"   ' <-- anpassen
   
    If i < 3 Then
        ChDir Ordner1
    Else
        ChDir Ordner2
    End If
   
    Datei = Application.GetOpenFilename("Excel Dateien (*.xls*), *.xls*")
    If Datei <> False Then
        Set WB = Workbooks.Open(Datei)
    Else
        GoTo Fehler
    End If
   
    With WB
        With Worksheets(1)
            .Range("C4:C13").Copy: UE.Range("B2").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("C22:C39").Copy: UE.Range("B14").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("D22:D39").Copy: UE.Range("B35").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("E22:E39").Copy: UE.Range("B56").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("C46:C67").Copy: UE.Range("B77").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("E46:E67").Copy: UE.Range("B102").Offset(0, i - 1).PasteSpecial xlPasteValues
        End With
       
        With Worksheets(2)
            .Range("B2:B77").Copy: UE.Range("I2").Offset(0, i - 1).PasteSpecial xlPasteValues
            .Range("C2:C77").Copy: UE.Range("O2").Offset(0, i - 1).PasteSpecial xlPasteValues
        End With
    End With
   
    WB.Close Savechanges:=False
Next i
Exit Sub

Fehler:
MsgBox "User hat Abbrechen gedrückt."
End Sub
Zitieren
#18
Hallo Sabina,

danke! Die erste Spalte funktioniert bis auf kleine Anpassungen bezüglich den Ranges aber das ist perfekt.

Nun habe ich allerdings noch zwei Fragen:

1. Ich muss die Datei aus dem Ordner "Vorkalkulation" auswählen. Kann man hier was machen, dass automatisch immer die Datei genommen wird, welche sich darin befindent?
Das ich quasi immer nur die gültige Datei in den Ordner kopiere und es damit immer nur eine Datei gibt?

2. Ich bekomme die Fehlermeldung "Laufzeitfehler '1004': Anwendungs- oder objektdefinierter Fehler" sobald der Code die Stelle erreicht:
With Worksheets(2)
.Range ("C2:C77").Copy: UE.Range("O2)
.Offset(0, i - 1)PasteSpecial xlPasteValues

Diese Fehlermeldung erhalte ich allerdings erst, wenn ich alles per Einzelschritt debugge. Wenn ich "nur" auf meine Schaltfläche klicke, kommt nur eine Fehlermeldung "400"

Kannst du damit was anfangen?
Weiß nicht woran das liegen kann.

LG
David
Zitieren
#19
Hallo David,

wenn du die Zeilen in deinem Code nicht in einer Zeile stehen hast, verwendest du nicht meinen neuen Code ... oder es hat sich ein Fehler beim Kopieren eingeschlichen. Einfach mal den neuen Code nochmal anschauen.

Zu deinen Dateien im Ordner ... mein Code ist so angelegt, dass du einfach die Dateien auf dem Ursprungs-Laufwerk auswählst.
Da muss nichts in einen anderen Ordner kopiert werden ... Excel öffnet einfach die Datei im Ursprungsordner, liest sie aus und schließt sie wieder. Natürlich, ohne sie zu ändern.

Kein Kopieren ... einfach nur auswählen ... auslesen ... und gut. Nur so kann man genau sicherstellen, welche Datei geöffnet wird.

Wie bereits gesagt ... irgendwelche Dateien, die in irgendeinen Ordner kopiert werden und die dann Excel selbstständig erkennen und verarbeiten soll ... obwohl niemand vorher deren Namen kennt ... viel zu Fehleranfällig ... das macht keinen Sinn und deshalb kriegst du es von mir auch nicht ... und falls du es noch einmal, wenn auch nur durch die Blume, von mir verlangst, bin ich weg ... ich habe dir schließlich eine funktionierende Variante angeboten.
Zitieren
#20
Guten Morgen Sabina,

das mit dem Code über zwei Zeilen war lediglich dafür, um es besser darstellen zu können. Habe die Antwort per Handy verfasst.

Ich habe den kompletten Code kopiert und folgendes Angepasst:



Ordner1 = "C:\1\" ' <-- anpassen
Ordner2 = "C:\2\" ' <-- anpassen


For i = 1 To 4
    ChDrive "C:"   ' <-- anpassen


Ordner1 = "C:\Users\David\Documents\Test\Vorkalkulation"
Ordner2 = "C:\Users\David\Documents\Test\Nachkalkulation"

und das bei ChDrive habe ich auf "C:\Users\David\Documents\Test" angepasst.
Und dann habe ich noch die worksheetsbezeichnung geändert. Man muss nämlich zuerst von Worksheet 2 die Daten kopieren und dann von Worksheet 1.
Sprich ich habe nur die Zahlen in der Klammer ausgetauscht.



LG
David
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 5 Gast/Gäste




Hinweis auf Angebot Excel-Inside - lang    Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden um dein Anliegen zu besprechen.
   Gerne erstellen wir auf dieser Basis ein Angebot.
   Sende deine Anfrage einfach
per E-Mail an anfrage@excel-inside.de


Powerd and supported by Excel-InsideSolutions