Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1752to1756
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

Datenimport aus geschlossener Mappe

Datenimport aus geschlossener Mappe
28.04.2020 20:30:03
excelkid
Hallo zusammen!
als kompletter VBA Neuling möchte ich euch hier mein Problem schildern.
Ich möchte Werte aus einer Mappe X in die Mappe Y per Knopfdruck importieren ohne die Quelldatei zu öffnen.
Mappe X liegt in einem Ordner und wird jeden Monat aktualisiert und entsprechend wird auch die Endung angepasst z.B. Mappe X_2020_04 wird zu Mappe X_2020_05.
Mein Ansatz:
Sub MappeX_importieren()
Dim src as Workbook
Set src = Workbooks.open Filename:="C:Pfad\MappeX" &""""&"".xlsm"
ThisWorkbook.activate.
Worksheets(Tabelle1). Range("A5:Q5").Formula = src.Worksheets("Tabelle1).Range("A5:Q5).Formula
Src.close
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenimport aus geschlossener Mappe
28.04.2020 20:40:33
Hajo_Zi

Option Explicit
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range( _
SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data from  _
closed Workbook"
GetDataClosedWB = False
End Function
Public Sub HoleDaten()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Pfad = "L:\Eigene Dateien\Hajo\Internet\Test\2009\"
Dateiname = "Beispiel Forum 30.xlsm" ' aus welcher Datei soll er holen?
Blatt = "Tabelle1"  ' von welcher Tabelle soll er holen?
Bereich = "A1:B9"   ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer gesagt:  _
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub
'Public Sub HoleDaten()
'    ' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
'    Dim Pfad            As String
'    Dim Dateiname       As String
'    Dim Blatt           As String
'    Dim Bereich         As String
'    Dim Ziel            As Range
'    Dim Razelle As Range
'    Dim LoI As Long
'    Dim Loletzte As Long
'    Dim Loletzte2 As Long
'    Set Ziel = ActiveSheet.Cells(1, ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row  _
+ 1)
'    ' in welchen Bereich soll er kopieren? Genauer gesagt: _
'    Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
'    If Range("G1")  "" Then
'        Loletzte = IIf(IsEmpty(Cells(Rows.Count, 7)), Cells(Rows.Count, 7).End(xlUp).Row, Rows. _
Count)
'        For LoI = 1 To Loletzte
'            Pfad = Cells(LoI, 7)
'            Dateiname = "hayo.xlsm" ' aus welcher Datei soll er holen?
'            Blatt = Cells(LoI, 8)  ' von welcher Tabelle soll er holen?
'            Bereich = Cells(LoI, 9)  ' aus welchem Bereich soll er holen?
'            Set Ziel = ActiveSheet.Range("A1")  ' in welchen Bereich soll er kopieren? Genauer  _
gesagt: _
'            Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht  _
auch
'            If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
'                MsgBox "Daten importiert"
'            End If
'        Next LoI
'    End If
'End Sub

Anzeige
AW: Datenimport aus geschlossener Mappe
28.04.2020 21:01:17
excelkid
Hallo Hajo_Zi,
erstmal vielen Dank für die schnelle Antwort!
Wie schaut es denn aus, wenn sich der Dateiname bzw. das Datumskürzel von Monat zu Monat ändert? Wie kann ich einen variablen Dateinamen festlegen ohne jedesmal den Code umschreiben zu müssen?
Im Quellordner soll immer nur die Datei zum jeweiligen Monat abgelegt sein. Im nächsten Monat kommt die Datei ins Archiv verschoben und wird durch den neuen Stand ersetzt.
AW: Datenimport aus geschlossener Mappe
28.04.2020 21:10:33
Hajo_Zi
bemutze eine Variable die sich auf eine Zelle bezieht.
Gruß Hajo
Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 09:10:56
excelkid
Hallo Hajo_Zi,
Ich verstehe nicht ganz den Zusammenhang zwischen den Codes "Holedaten" und der function GetdataclosedWB.
Public Function GetDataClosedWB(SourcePath As String, _
SourceFile As String, sourceSheet As String, _
SourceRange As String, TargetRange As Range) As Boolean
'Holt einen Bereich aus einer _geschlossenen_ Arbeitsmappe
'Nur in VBA zu verwenden; nicht aus einer Tabellenzelle heraus
'© t.ramel@mvps.org
' wird durch die HoleDaten aufgerufen
Dim strQuelle       As String
Dim Zeilen          As Long
Dim Spalten         As Byte
On Error GoTo InvalidInput
strQuelle = "'" & SourcePath & "[" & SourceFile & "]" & sourceSheet & "'!" & Range( _
SourceRange).Cells(1, 1).Address(0, 0)
Zeilen = Range(SourceRange).Rows.Count
Spalten = Range(SourceRange).Columns.Count
With TargetRange.Cells(1, 1).Resize(Zeilen, Spalten)
.Formula = "=IF(" & strQuelle & "="""",""""," & strQuelle & ")"
.Value = .Value
End With
GetDataClosedWB = True
Exit Function
InvalidInput:
MsgBox "Die Quelldatei oder der Quellbereich ist ungültig!", vbExclamation, "Get data  _
from _
closed Workbook"
GetDataClosedWB = False
End Function

Die Sub Holedaten() habe ich soweit ausgefüllt jedoch weiß ich nicht ob der Code den variablen Dateinamen erkennt.

Public Sub HoleDaten()
' Die Funktion arbeitet mit der obrigen GetDataClosedWB zusammen
Dim Pfad            As String
Dim Dateiname       As String
Dim Blatt           As String
Dim Bereich         As String
Dim Ziel            As Range
Pfad = "C:\Users\Desktop\Kosten\Stückzahlen"
Dateiname = "Stückzahlen" & "?" & "?" ' aus welcher Datei soll er holen?
Blatt = "Stückzahl"  ' von welcher Tabelle soll er holen?
Bereich = "F4:Q19"   ' aus welchem Bereich soll er holen?
Set Ziel = ActiveSheet.Range("F4:Q19")  ' in welchen Bereich soll er kopieren? Genauer  _
gesagt: _
Bei welcher Zelle soll er anfangen, Datein reinzukopieren? Bsp: ActiveCell geht auch
If GetDataClosedWB(Pfad, Dateiname, Blatt, Bereich, Ziel) Then
MsgBox "Daten importiert"
End If
End Sub

Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 15:45:54
Hajo_Zi
bei mir hat der Dateinamen einen Typ XLSM oder XLSX das ist bei Dir also nicht.
Keine Ahnung ob ? im Dateinamen zulässig. Ich würde vermuten NEIN.
Gruß Hajo
AW: Datenimport aus geschlossener Mappe
28.04.2020 22:46:52
Daniel
hi
hol dir die Daten ganz normal per Formel mit externen Zellbezug.
wenn du der neue Monat kommt, gibt's zwei Möglichkeiten:
1. ersetze mit der Menüfunktion "Ersetzen" den alten durch den neuen Dateinamen
2. klicke auf "Daten - Verbindungen - Verknüpfungen bearbeiten" und wähle dort die neue Datei aus.
gruß Daniel
AW: Datenimport aus geschlossener Mappe
29.04.2020 08:14:02
excelkid
Hallo Daniel,
die Alternative habe ich auch in Erwägung gezogen jedoch wieder verworfen. Wenn die Spalten und Zeilen in der Quelldatei sich ändern sollten, müsste man alle Zellbezüge neu setzen. Da es sich bei der Quelldatei um eine Range von (F4-Q19) handelt und die Zahlen abhängig von der Zeilenüberschrift in 12 verschiedene Tabellenblätter in der Zieldatei kopiert werden sollen, möchte ich das ganze möglichst automatisiert gestalten.
Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 11:55:04
volti
Hallo ExcelKid,
wenn es Dich nicht stört, dass die "geschlossene" Datei unsichtbar kurz im Hintergrund geöffnet wird und die Formate mitgenommen werden, kann ich Dir nachfolgendes Makro für die Kopie eines zusammenhängenden Block empfehlen. (Konnte ich leider nicht testen)
Ich gehe hierbei davon aus, dass nur eine dem DIR-Muster entsprechende Quelldatei jeweils vorliegt, dann wird auch immer ohne Dein Zutun die neueste Datei verwendet.
Probiere es einfach mal aus, vielleicht gefällt es Dir ja.

Option COMPARE TEXT
Private Sub DatenLaden()
 Dim sFile As String, sPath As String, sBereich
 Dim sZiel As String
 sPath = "C:\Users\Desktop\Kosten\Stückzahlen\"         'Pfad eingeben
 sFile = Dir$(sPath & "Stückzahlen_2020_*.xlsx")        'Quelldatei dynamisch ermitteln
 sZiel = ActiveSheet.Name
 With GetObject(PathName:=sPath & sFile)
   .Sheets("Stückzahl").Range("$F$4:$Q$19").Copy _
   Destination:=ThisWorkbook.Sheets(sZiel).Range("F4") 'Zielblatt und Zielzelle
   .Close SaveChanges:=False
 End With
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 11:59:12
volti
Upps, noch eine kleine, eher unwichtige Anpassung:

Option Explicit
Private Sub DatenLaden()
 Dim sFile As String, sPath As String, sZiel As String
 sPath = "C:\Users\Desktop\Kosten\Stückzahlen\"         'Pfad eingeben
 sFile = Dir$(sPath & "Stückzahlen_2020_*.xlsx")        'Quelldatei dynamisch ermitteln
 sZiel = ActiveSheet.Name
 With GetObject(PathName:=sPath & sFile)
   .Sheets("Stückzahl").Range("$F$4:$Q$19").Copy _
   Destination:=ThisWorkbook.Sheets(sZiel).Range("F4") 'Zielblatt und Zielzelle
   .Close SaveChanges:=False
 End With
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 13:37:10
excelkid
Hallo Karl Heinz,
vielen Dank für die schnelle Antwort. Beim Ausprobieren erscheint die folgende Fehlermeldung:
"Laufzeitfehler 432: Datei- oder Klassenname während Automatisierungsoperation nicht gefunden"
Ich kann mir nicht erklären woher die Fehlermeldung kommt, da ich die Pfade richtig eingegeben habe.
Private Sub DatenLaden()
Dim sFile As String, sPath As String, sZiel As String
sPath = "C:\Users\Desktop\Kosten\Stückzahlen\"         'Pfad eingeben
sFile = Dir$(sPath & "Stückzahlen_*_*.xlsm")        'Quelldatei dynamisch ermitteln
sZiel = ActiveSheet.Name
With GetObject(PathName:=sPath & sFile)
.Sheets("Stückzahl").Range("$F$4:$Q$19").Copy _
Destination:=ThisWorkbook.Sheets("Tabelle1").Range("F4") 'Zielblatt und Zielzelle
.Close SaveChanges:=False
End With
End Sub

Anzeige
AW: Datenimport aus geschlossener Mappe
29.04.2020 15:42:29
volti
Hallo ExcelKid,
bist Du sicher, dass Dein Pfad stimmt. Ich glaube, ich hatte da was vergessen (sorry) und Du hast es nicht angepasst.
In nachfolgender Sub habe ich noch etwas Sicherheit eingebaut. Und Du schaust noch mal nach Deinem Pfad. (voltm ersetzen....)

Private Sub DatenLaden()
 Dim sFile As String, sPath As String
 sPath = "C:\Users\voltm\Desktop\Kosten\Stückzahlen\"      'Pfad eingeben
 sFile = Dir$(sPath & "Stückzahlen_*_*.xlsm")              'Quelldatei dynamisch ermitteln
 If sFile <> "" Then
  With GetObject(PathName:=sPath & sFile)
   .Sheets("Stückzahl").Range("$F$4:$Q$19").Copy _
   Destination:=ThisWorkbook.Sheets("Tabelle1").Range("F4") 'Zielblatt und Zielzelle
   .Close SaveChanges:=False
  End With
 End If
End Sub
viele Grüße
Karl-Heinz

Anzeige
AW: Datenimport aus geschlossener Mappe
04.05.2020 08:32:05
excelkid
Hallo Karl-Heinz,
nach Ergänzen der If-Schleife hat es geklappt. Vielen Dank für deine Hilfe!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige