Microsoft Excel

Herbers Excel/VBA-Archiv

Daten importieren mit Zellenbezug

Betrifft: Daten importieren mit Zellenbezug von: Si Mon
Geschrieben am: 22.10.2020 01:14:56

Hallo liebes Forum!
Ich habe jetzt einige Stunden nach einer Lösung für ein Makro gesucht, jedoch nur Fragmente gefunden, die mir nicht wirklich helfen.
Es geht darum, immer eine bestimmte Range aus Tabellenblatt1 aus einer anderen (Excel)Datei zu importieren. Vom Grundsatz her kein Problem, wenn nicht die Hürde besteht, dass jeden Tag eine andere Datei zu importieren ist, heißt, der Pfad und der Dateiname stets dynamisch ist.
Beispiel:
Pfad der zu importierenden Datei: C:\Beispiel\KW1\Montag, 01.01.2020.xls, Dienstag, 02.01.2020.xls, Mittwoch, 03.01.2020.xls, Donnerstag, 04.01.2020.xls, Freitag, 05.01.2020.xls.... bis C:\Beispiel\KW53\...Freitag, 31.12.2020.xls
Bis C:\Beispiel\ ist der Pfad immer konstant, aber je nach Tagesdatum und KW ist das Auslesen aus einem anderen Unterordner und natürlich einer anderen Datei notwenig.
Mein Ansatzpunkt ist nun der, dass ich in meiner Datei in Tabelle1, B2 das Tagesdatum generieren lasse und in C2 die aktuelle KW.
Nun aber komme ich nicht dahinter, wie ich es hinbekomme, dass das Makro folgendes macht:
Aus C:\Beispiel\Tabelle1C2 & Tabelle1B2 die entsprechende Datei findet und und die Range(z.B. A1:D100) in Tabelle2 A1 einfügt.
Jemand eine Idee?

Betrifft: AW: Daten importieren mit Zellenbezug
von: Werner
Geschrieben am: 22.10.2020 02:08:20

Hallo,

teste mal:
Public Sub Import()
Dim strPfad As String, wbInput As Workbook

Application.ScreenUpdating = False

With ThisWorkbook.Worksheets("Tabelle2")
    strPfad "C:\Beispiel\" & .Cells(2, "C") & "\" & .Cells(2, "B") & ".xlsx"
    Set wbInput = Workbooks.Open(strPfad)
    wbInput.Worksheets("Tabelle1").Range("A1:D100").Copy
    .Cells(1, "A").PasteSpecial Paste:=xlPasteValues
    wbInput.Close False
End With

Set wbInput = Nothing
End Sub
In B2 steht der Dateiname ohne Dateierweiterung
In C2 steht das Verzeichnis ohne Backslash am Ende
Den Blattnamen, aus dem die Daten kommen, mußt du im Code noch anpassen.

Sicher, dass das .xls Dateien sind? Du gibst Excel 2016 an, dann wären das .xlsx

Gruß Werner

Betrifft: AW: Daten importieren mit Zellenbezug
von: Si Mon
Geschrieben am: 22.10.2020 10:14:38

Hallo Werner und schon mal vielen Dank für deine Hilfe.
Ich habe das Makro entsprechend übernommen und wollte es ausprobieren.
Leider kam dann jedoch eine Fehlermeldung, dass die Datei in C:\Beispiel\\.xlsx nicht gefunden werden kann. Es scheint, dass das Makro wohl nicht den Inhalt der Zellen für den Unterordnernamen und den Dateinamen ausliest. Kann es daran liegen, dass sowohl KW, als auch Tagesdatum durch eine Formel generiert sind?
Und sorry, bei der Excel-Anwendung habe ich mich verdaddelt - ich nutze Excel2013.
Grüße
Si Mon

Betrifft: AW: Daten importieren mit Zellenbezug
von: Si Mon
Geschrieben am: 22.10.2020 11:09:15

Okay, kleiner Nachtrag - den Fehler, warum er den Pfad nicht richtig gefunden hat, habe ich lösen können. Ein kleines Problem bleibt jedoch, welches das Öffnen der Dateien verhindert.
Ich habe in B2 das Tagesdatum mit =Heute() definiert und durch Zellformation die Ausgabe angepasst, dass eben nicht nur 22.10.2020 in der Zelle steht, sondern Donnerstag, 22.10.2020.
Das Makro sucht jedoch nur nach einer Datei, die 22.10.2020 heißt und nicht Donnerstag,22.10.2020.
Muss in dem Fall bei der Pfadsuche die Formatierung mit berücksichtigt werden?

Betrifft: AW: Daten importieren mit Zellenbezug
von: Werner
Geschrieben am: 22.10.2020 13:01:45

Hallo,
Public Sub Import()
Dim strPfad As String, wbInput As Workbook

Application.CutCopyMode = False

With ThisWorkbook.Worksheets("Tabelle2")
    strPfad = "C:\Beispiel\" & .Cells(2, "C") & "\" & .Cells(2, "B").Text & ".xlsx"
    Set wbInput = Workbooks.Open(strPfad)
    Application.DisplayAlerts = False
    wbInput.Worksheets("Tabelle1").Range("A1:D100").Copy
    .Cells(1, "A").PasteSpecial Paste:=xlPasteValues
    wbInput.Close False
End With

Application.CutCopyMode = False
Set wbInput = Nothing
End Sub
Gruß Werner

Gruß Werner

Betrifft: AW: Daten importieren mit Zellenbezug
von: Si Mon
Geschrieben am: 22.10.2020 13:44:02

Hallo Werner!



Vielen Dank für deine Hilfe, jetzt funktioniert das Makro genau so, wie es soll!



Ich hoffe, dass ich irgendwann selbstständig in der Lage sein werde Makros so gut programmieren zu können! Oft sind es ja nur Kleinigkeiten, die einen aber echt in den Wahnsinn treiben können! Aber schön, wenn man hier auf die Hilfe anderer bauen kann, wenn man mal nicht weiter weiß!

Betrifft: Gerne u. Danke für die Rückmeldung. o.w.T.
von: Werner
Geschrieben am: 22.10.2020 14:38:02



Betrifft: AW: Daten importieren mit Zellenbezug
von: Si Mon
Geschrieben am: 22.10.2020 19:53:58

Ich nochmal.... die Hilfe, die ich hier bekommen habe, hat wunderbar in meiner Beispieldatei funktioniert. Nun wollte ich das Ganze natürlich für die Datei auf der Arbeit ausarbeiten.
Dazu habe ich nun folgenden Code:
Option Explicit

Sub copieren()
  Dim strPfad As String, wbInput As Workbook
  
  Application.CutCopyMode = False
  
  With ThisWorkbook.Worksheets("Invision")
      strPfad = "W:\intranet\Teamtreffen\InVison_Listen\" & .Cells(1, "L") & "\" & .Cells(1, "K" _
) & ".xlsm"
      Set wbInput = Workbooks.Open(strPfad)
      Application.DisplayAlerts = False
      wbInput.Worksheets("Tabelle1").Range("A1:D100").Copy
      .Cells(2, "A").PasteSpecial Paste:=xlPasteValues
      wbInput.Close False
  End With
  Application.CutCopyMode = False
  Set wbInput = Nothing
  End Sub

Wenn ich das Makro starten möchte, dann sehe ich auch, dass er genau den richtigen Pfad anspricht und ich weiß auch, dass die Datei dort liegt. Aber es führt dennoch nicht die Funktion aus.
Es erscheint der Fehlerhinweis: Leider konnte "Pfad...\ nicht gefunden werden (es wird der richtige Pfad genannt). Ist es möglich, dass der Pfad verschoben, umbenannt oder gelöscht wurde?
Klicke ich dann auf okay öffnet sich der VBA-Editor und weist den Laufzeitfehler '1004' aus, wo steht, dass auf die gewünschte Datei nicht zugegriffen werden kann, Gründe:
- Name des Dokuments oder Pfad nicht vorhanden --> doch, ist er!
- Das Dokument wird von einem anderen Programm verwendet --> ja, es handelt sich um eine Liste, die auch in einer anderen Excel eingelesen wird - diese Datei MUSS auch den ganzen Tag über geöffnet sein und wird auch ggf. durch einen anderen Nutzer bedient.
-Der Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches schreibgeschützt ist. --> keine Ahnung, was das Programm mir sagen will?!

Fakt: Wenn ich die Datei manuell/händisch aufrufe, erhalte ich keine Fehlermeldung. Es scheint wohl daran zu liegen, dass ich es über ein Makro mache.
Ich will an der Datei aber keine Änderungen vornehmen, sondern lediglich einen bestimmten Bereich kopieren.
Gibt es eine Möglichkeit, diese Fehlermeldung zu umgehen? Ggf. durch einen Zusatz, o.ä.? Mit der Ergänzung "ReadOnly:=True" etc. habe ich es bereits probiert - klappt leider nicht.
Ich hoffe, es kann mir jemand helfen? Bin für jede Antwort dankbar!!

Betrifft: AW: Daten importieren mit Zellenbezug
von: Si Mon
Geschrieben am: 22.10.2020 21:46:21

Nachtrag:
Es wird folgender Bereich im Debugger markiert:
Set wbInput = Workbooks.Open(strPfad, UpdateLinks:=False, ReadOnly:=True)

Beiträge aus dem Excel-Forum zum Thema "Daten importieren mit Zellenbezug"