Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1676to1680
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

VBA - Werte aus externen Dateien einlesen

VBA - Werte aus externen Dateien einlesen
04.03.2019 22:14:28
Pfanner
Guten Abend,
Ich würde gerne ein VBA-Makro erstellen, der bestimmte feste Werten aus externen Excel-Dateien herausnimmt und in eine vordefinierte Tabelle einfügt und bitte euch aus diesem Grund um Hilfe;
Ich habe ein Ordner, der täglich mit neuen Excel-Auswertungen (Aufbau gleich, Name ähnlich z.b. Auswertung_03-01-19, Auswertung_03-02-19...) gefüllt wird. Aus diesen Auswertungen würde ich gern täglich vier bestimmte Werte auslesen und in ein vordefiniertes Tabellenblatt waagerecht einfügen. Die vier Werte sind in jeder Datei in fixen Zellen und in der Tabelle2 (z.B. A1,C2,D3,E4) kurze Info zu den Werten; diese werden durch andere Werte in Tabelle1 errechnet und in Tabelle2 angegeben. Letztlich sind aber nur die Endwerte in Tabelle2 für mich wichtig. Datum wird sowohl als Dateiname aber auch in Tabelle2 z.B. B1 angegeben, welche für die Zuordnung der Werte wichtig ist.
In der vordefinierten Tabelle würde ich gern die 4 Werte innerhalb eines Monats vergleichen (siehe Bild zur Veranschaulichung)

Bei der Suche nach Lösungen bin ich auf diesen Thread im Archiv gestoßen https://www.herber.de/forum/archiv/1192to1196/1192844_Werte_mittels_VBA_auslesen.html
und von der Problematik ist es ähnlich allerdings habe ich es nicht hinbekommen. Eventuell hilft es einen von euch..
Kenntnisstand in VBA: kaum bzw. versuche mich mit Tutorials irgendwie reinzufuchsen aus diesem Grund bedanke ich mich für jede(n) Hilfe/Lösungsansatz.
Schönen Rosenmontagabend noch

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 08:15:45
Bernd
Servus Pfanner,
lade bitte eine Beispieldatei hoch, damit man die Struktur/Formatierung der Daten und das gewünschte Resultat sehen kann. Alles andere ist ein Schuss ins Blaue hinein...
Grüße, Bernd
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 09:41:43
Pfanner
Guten Morgen Bernd,
vielen Dank für deine schnelle Rückmeldung.
Anbei vier Beispiele von Auswertungen und eine Vorlagetabelle
https://www.herber.de/bbs/user/128112.zip
Pfanni
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 14:47:08
Bernd
Servus Pfanner,
teste mal, die Tabellenblattnamen und Speicherpfade musst du ggf noch anpassen!

Private Sub Workbook_Open()
Dim Tag As Integer
Dim intLS As Integer
Dim i As Integer
Dim strPfaddWB As String
Dim strDat As String
Dim Spalte As Integer
Dim strDateisuche As String
Dim strDateipfad As String
Dim dWB As Workbook
Dim WB As Workbook
Set dWB = ThisWorkbook
intLS = ActiveSheet.Cells(3, Columns.Count).End(xlToLeft).column
Tag = Day(Date)
strPfaddWB = dWB.Path
If Right(strPfaddWB, 1)  "\" Then strPfaddWB = strPfaddWB & "\"
For i = 2 To intLS
If CInt(Right(ActiveSheet.Cells(3, i).Value, 2)) = Tag Then
Spalte = i
Exit For
End If
Next i
strDateisuche = CStr("Auswertung_" & Format(Month(Date), "00") & "-" & Format(Day(Date), "00") & _
"-" & Right(Format(Year(Date), "0"), 2) & ".xlsx")
strDateipfad = strPfaddWB & "Auswertungen\"
Set WB = Workbooks.Open(strDateipfad & strDateisuche, ReadOnly:=True)
With dWB
.Sheets("Tabelle1").Cells(4, Spalte).Value = WB.Sheets("Tabelle2").Cells(1, 1).Value
.Sheets("Tabelle1").Cells(5, Spalte).Value = WB.Sheets("Tabelle2").Cells(2, 3).Value
.Sheets("Tabelle1").Cells(6, Spalte).Value = WB.Sheets("Tabelle2").Cells(3, 4).Value
.Sheets("Tabelle1").Cells(7, Spalte).Value = WB.Sheets("Tabelle2").Cells(4, 5).Value
End With
WB.Close False
Set WB = Nothing
Set dWB = Nothing
End Sub
Grüße, Bernd
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 15:06:21
Pfanner
Hallo Bernd,
könntest du für mich (VBA-Anfänger) die einzelnen Ablaufschritte erklären die dein Code ausführt?
Danke!
Pfanni
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 15:49:02
Bernd
Servus Pfanner,
die Erklärung in der TXT-Datei im Anhang.
Bei der eingeschränkten Darstellungsmöglichkeit hier im Forum würde einen VBA-Beginner nur verwirren.
https://www.herber.de/bbs/user/128125.txt
Grüße, Bernd
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 16:08:21
Pfanner
tach Bernd,
vielen Dank für deine schnellen Rückmeldungen und die ausführliche Erklärung.
Allerdings stehe ich gerade auf dem Schlauch, wo genau muss ich den Dateipfad (C:\Users\Pfanni\Desktop\Test\Test_Vorlage\Auswertungen) angeben?
hier oder?
strPfaddWB = dWB.Path 

Anzeige
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 16:32:26
Bernd
Servus Pfanner,
über diesen Code:
strPfaddWB = dWB.Path 

wird der Variable "strPfaddWB" der aktuelle Speicherpfad der Datei "Vorlagetabelle.xlsm" zugewiesen.
Für die Datei "Vorlagentabelle.xlsm" selbst ist dieser Pfad nicht so wichtig.
ABER
Anhand der ZIP-Datei bin ich davon ausgegangen, dass du im Speicherpfad "strPfaddWB" einen weiteren Unterordner Namens "Auswertungen" liegen hast, in dem die einzelnen Tagesauswertungen abgelegt werden.
Daher habe ich für den Speicherpfad der Tagesauswertungen (= strDateipfad) diesen Pfad als Basis verwendet:
strDateipfad = strPfaddWB & "Auswertungen\"
An dem von dir geschriebenen Pfad sollte also die "Vorlagentabelle.xlsm" hier liegen:
C:\Users\Pfanni\Desktop\Test\Test_Vorlage\

und die Tagesauswertungen hier
C:\Users\Pfanni\Desktop\Test\Test_Vorlage\Auswertungen\

Für dich zur einfacheren Nachvollziehbarkeit würde ich dir vorschlagen den Code direkt in den VBA-Editor unter "DieseArbeitsmappe" zu kopieren und dann mit der Taste F8 Schritt für Schritt durchzugehen. Schalte zusätzlich das Lokalfenster (=> Ansicht=>Lokalfenster) dazu und du kannst Codezeile für Codezeile den Fortschritt/Befüllung der Variablen nachvollziehen...
Grüße, Bernd
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
05.03.2019 20:18:05
Pfanner
Nabend Bernd,
Es hat ein wenig gedauert aber ich konnte jetzt nun den Ablauf verstehen. Hatte zuerst einen "Fehler" der ganze Zeit aufgetaucht ist und nicht die Datei vom 05.03 finden konnte; dummerweise hatte ich keine Auswertungsdatei vom 05.03 erstellt ;D - hat sich erledigt, die Werte werden passend eingefügt. Für die Verwirrung mit der .zip Datei bitte ich um Nachsicht, die Dateipfäde sind genauso wie du es geschrieben hast.
Vielen Dank Bernd für deine Mühe und Geduld!
___________________________________________________
Allerdings hätte ich noch ein paar Fragen/ bzw. mögliche Erweiterungen:
Die Musterform der Dateinamen ändert sich ein wenig, z.B. "Auswertung_2019-03-06_07-00"
strDateisuche = CStr("Auswertung_" & Format(Month(Date), "00") & "-" & Format(Day(Date), "00") & _
_
"-" & Right(Format(Year(Date), "0"), 2) & ".xlsx")

Kann ich hier einfach die Positionen switchen? (so dass das neue Format akzeptiert wird)
Eine weitere Frage wäre, wie kann man den Code erweitern, so dass jeden Tag nur die Werte der älteren Auswertung übernommen werden?
Beispiel:
Auswertung_2019-03-06_07-00 (Werte von hier sollen übernommen werden | 07:00 Uhr Datei)
Auswertung_2019-03-06_10-15 (Werte von hier sollen nicht übernommen werden | 10:15 Uhr Datei)
Sollten weitere fixe Werte dazukommen kann ich hier den Code einfach erweitern mit den passenden Zeilen/Spaltennummern? (siehe Beispiel mit X)

.Sheets("Tabelle1").Cells(4, Spalte).Value = WB.Sheets("Tabelle2").Cells(1, 1).Value
.Sheets("Tabelle1").Cells(5, Spalte).Value = WB.Sheets("Tabelle2").Cells(2, 3).Value
.Sheets("Tabelle1").Cells(6, Spalte).Value = WB.Sheets("Tabelle2").Cells(3, 4).Value
.Sheets("Tabelle1").Cells(7, Spalte).Value = WB.Sheets("Tabelle2").Cells(4, 5).Value
.Sheets("Tabelle1").Cells(8, Spalte).Value = WB.Sheets("Tabelle2").Cells(X, X).Value    
___________________________________
Der Vorschlag, den Code Schritt für Schritt durchzugehen und das Öffnen des Lokalfensters hat mir sehr geholfen. Danke nochmals dafür!
Pfanni
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
06.03.2019 15:48:54
Bernd
Servus Pfanner,
Die Musterform der Dateinamen ändert sich ein wenig, z.B. "Auswertung_2019-03-06_07-00" ...
Kann ich hier einfach die Positionen switchen? (so dass das neue Format akzeptiert wird)

Ja, switchen sollte kein Problem sein.
Eine weitere Frage wäre, wie kann man den Code erweitern, so dass jeden Tag nur die Werte der älteren Auswertung übernommen werden?
Das wird ein bisschen komplizierter. Da ich selbst auch nicht sooo fit in VBA bin kann ich dir hier keine direkte Hilfestellung geben. Sorry.
Theoretisch könnte man die Uhrzeit, ähnlich dem Jahr, mit "Right", "Mid" und "Left" zerteilen und dann die Teilbereiche vergleichen, aber das traue ich mir selbst nicht mehr zu...
Sollten weitere fixe Werte dazukommen kann ich hier den Code einfach erweitern mit den passenden Zeilen/Spaltennummern?
Auch hier kann ich das bejahen.
Grüße, Bernd
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
06.03.2019 16:17:03
Pfanner
Servus Bernd,
Kannst du mal schauen, ob dieser Code für das neue Format geeignet wäre?
Neue Format: "Auswertung_2019-03-06_07-00"
strDateisuche = CStr("Auswertung_" & (Format(Year(Date), "0"), 2) & "-" & _
& Format(Month(Date), "00") & "-" & Format(Day(Date), "00") & "_" & Format(Time(Date), "00") & ".xlsx")

___________________________
"Das wird ein bisschen komplizierter. Da ich selbst auch nicht sooo fit in VBA bin kann ich dir hier keine direkte Hilfestellung geben. Sorry.
Theoretisch könnte man die Uhrzeit, ähnlich dem Jahr, mit "Right", "Mid" und "Left" zerteilen und dann die Teilbereiche vergleichen, aber das traue ich mir selbst nicht mehr zu..."

Alles klar, ich versuch mich da mal da irgendwie reinzufuchsen. Allerdings würde es fürs erste reichen, wenn er das neue Namensformat erkennt.
________________________________________________
Weitere Frage:
Sollten die Auswertungen und die Vorlagetabelle in unterschiedlichen Dateipfäden sein - also nicht wie in der .zip Datei. Wäre es noch mit deiner Lösung noch möglich? Oder müsste man irgendwo den Dateipfad angeben? Wenn ja könntest du es mir eventuell zeigen?
__________________________________
Neue Fixe Werte:
Die klappen einwandfrei - Danke
Gruß Pfanner
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
07.03.2019 07:55:48
Bernd
Servus Pfanner,
eine paar kleine Änderungen würde ich vornehmen. "Time" kann man auch alleinstehend verwenden, und Year gibt idR ohnehin immer die vierstellige Jahreszahl aus, also anstatt:

strDateisuche = CStr("Auswertung_" & Right(Format(Year(Date), "0"), 2) & "-" & _
& Format(Month(Date), "00") & "-" & Format(Day(Date), "00") & "_" & Format(Time(Date), "00") & " _
.xlsx")
würde ich gleich schreiben (ungetestet):

strDateisuche = CStr("Auswertung_" & Year(Date) & "-" & _
& Format(Month(Date), "00") & "-" & Format(Day(Date), "00") & "_" & Format(Time, "00-00") & ". _
xlsx")
Wenn die Tagesauswertungen in einem anderen Pfad liegen, dann muss er vollständig angegeben werden, also anstatt
strDateipfad = strPfaddWB & "Auswertungen\"

müsste er dann so aussehen:
strDateipfad = "C:\Ordner\Ordner\Ordner\Auswertungen\"
Kleiner Tipp am Rande:
Wenn die Dateien in einem Netzwerk liegen, dann ist die Verwendung des UNC-Pfades vorteilhaft, da nicht jeder immer die gleichen Laufwerksbuchstaben verwendet.
Also z.B. "\\Servername\Freigabename\Pfad" anstatt "Z:\Freigabename\Pfad"
Grüße, Bernd
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
07.03.2019 09:49:38
Pfanner
Moin Bernd,
danke für deine Verbesserung.
Das neue Format wird akzeptiert, allerdings werden nur Dateien mit dem Namen "Auswertung_2019-03-06_00-00" gefunden und ausgelesen. Wenn ich die Datei nun in "Auswertung_2019-03-06_07-00" ändere, wird es nicht mehr gefunden. Weißt du woran es liegen könnte? Also Jahr/Monat/Tag funktionieren einwandfrei - bei der Uhrzeit möchte der Code nur 00-00 auslesen
____________________________________
Bezüglich Netzwerk:
Das wär eine der nächsten Fragen gewesen, danke dafür. Die Auswertungen befinden sich auf einem Netzlaufwerk. Könntest du mir sagen eventuell, wie ich den Netzlaufwerkpfad am besten kopieren kann? Bei Eigenschaften wird mir nur der Laufwerkbuchstabe angezeigt. Ansonsten abtippen, wäre aber für die Zukunft zu wissen schön :D
Danke nochmals für deine Mühe
Pfanner
Anzeige
AW: VBA - Werte aus externen Dateien einlesen
07.03.2019 10:38:08
Bernd
Servus Pfanner,
probiere mal
Format(Time, "hh-mm")

anstelle von
Format(Time, "00-00")

für den UNC-Pfad musst du googlen...
war glaub ich irgendwas mit "cmd net use" oder so ähnlich
Grüße, Bernd
AW: VBA - Werte aus externen Dateien einlesen
07.03.2019 10:58:13
Pfanner
Hey Bernd,
Mit

Format(Time, "hh-mm")
liest er die aktuellen Uhrzeit ab und sucht nach einer Datei die "Auswertung_2019-03-06_10-58" heißt. (gepostet um 10:58)
Vielen Dank!
AW: VBA - Werte aus externen Dateien einlesen
10.03.2019 13:36:57
Pfanner
Servus Leute,
kurze Rückmeldung zum Problem bzw. die Lösung (vier fixe Werte auslesen und in eine Vorlagetabelle einfügen, am besten wird nur die ältere Datei ausgelesen)
Nach dem Problem mit dem Auslesen von 00-00 Dateien habe ich nach Hilfe in einem anderen Forum gebeten.(mit Bezug hierher!) Wer sich für den Werdegang der Lösung interessiert sollte zuerst alle Beiträge im Herber-Forum durchlesen und danach die Beiträge im MS-Office Forum. (https://www.ms-office-forum.net/forum/showthread.php?t=358739)
_________________________________________________________
Sub Auswertung()
Dim Tag As Integer
Dim intLS As Integer
Dim i As Integer
Dim strPfaddWB As String
Dim strDat As String
Dim Spalte As Integer
Dim strDateisuche As String
Dim strDateipfad As String
Dim dWB As Workbook
Dim WB As Workbook
Set dWB = ThisWorkbook
intLS = ActiveSheet.Cells(3, Columns.Count).End(xlToLeft).Column
Tag = Day(Date)
strPfaddWB = "C:\MeinPfad\"
If Right(strPfaddWB, 1)  "\" Then strPfaddWB = strPfaddWB & ""
For i = 2 To intLS
If CInt(Right(ActiveSheet.Cells(3, i).Value, 2)) = Tag Then
Spalte = i
Exit For
End If
Next i
strDateisuche = Dir(strPfaddWB & "*.xlsx")
Do While strDateisuche  ""
If strDateisuche Like "Auswertung_" & Format(Date, "yyyy-mm-dd") & "_*.xlsx" Then
Set WB = Workbooks.Open(strPfaddWB & strDateisuche, ReadOnly:=True)
With dWB
.Sheets("Tabelle1").Cells(4, Spalte).Value = WB.Sheets("Tabelle2").Cells(1, 1). _
Value
.Sheets("Tabelle1").Cells(5, Spalte).Value = WB.Sheets("Tabelle2").Cells(2, 3). _
Value
.Sheets("Tabelle1").Cells(6, Spalte).Value = WB.Sheets("Tabelle2").Cells(3, 4). _
Value
.Sheets("Tabelle1").Cells(7, Spalte).Value = WB.Sheets("Tabelle2").Cells(4, 5). _
Value
End With
WB.Close False
Exit Do
End If
strDateisuche = Dir
Loop
Set dWB = Nothing
Set WB = Nothing
End Sub

______________________________________________________
Ich bedanke mich ganz herzlich bei Bernd, Flotter Feger, Beverly und Aloys für die Hilfe.
Schönen Sonntag und bis zum nächsten Mal :D
Pfanner
Anzeige

320 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige