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

Werte aus versch. geschl. Dateien

Werte aus versch. geschl. Dateien
09.12.2020 14:43:35
Markus
Hallo miteinander,
ich muss zugeben, dass ich komplett neu hier bin und in VBA kaum bis gar keine Erfahrungen habe :-(
Ich habe folgendes Problem:
Ich habe auf dem Server in verschiedenen Ordnern Excel-Dateien liegen, aus denen ich Werte benötige, die in einer separaten Übersichtstabelle aufgeführt werden sollen. Diese Dateien sollen hierzu nicht geöffnet werden, da dies zu lange dauern würde und auch Unmengen von Dateien öffnen würde. Das untenstehende Makro funktioniert dahingehend dass ich schon Mal Werte aus einer Datei herausholen und in der separaten Tabelle zeigen kann. Jetzt habe ich allerdings folgende Probleme:
- in dem Makro kann nur eine einzige Datei angesprochen werden und deren Werte eingefügt werden
- zudem werden die Werte in den gleichen Spalten und Zeilen eingefügt, wo sie auch in der Quelldatei liegen
Was ich gerne hätte:
1. die in dem folgenden Makro fettgedruckten Dinge sollten aus einer Liste eigenständig verwendet werden. Der Link und der Dateiname stehen also z.Bsp. von B1 bis B10 bzw. C1 bis C10. in A1 bis A10 stehen die Projektnamen (Projekt1, Projekt2,usw.).
2. die abgefragten entsprechenden Werte der einzelnen Projekt-Datei sollen nun untereinander folgendermaßen Aufgelistet werden (z.Bsp. ab Zeile 15):
Projekt1
WertA24 WertB24 ... WertX24
WertA25 WertB25 ...
.... .... ...
(Leerzeile)
Projekt 2
WertA24 WertB24 ... WertX24
WertA25 WertB25 ...
.... .... ...
(Leerzeile)
usw.
Wie muss das Makro dahingehend dann aussehen, damit man das realisieren kann? Ich versuche wirklich in VBA rein zu kommen aber ohne Vorlage komme ich da absolut nicht weiter.
Kann mir hier jemand weiterhelfen?
Schon Mal Danke im Voraus für die Bemühungen.
Hier das momentan vorhandene Makro:
Sub Bereich_auslesen()
'** Dimensionierung der Variablen
Dim pfad As String, datei As String, blatt As String, bereich As Range, zelle As Object
'** Angaben zur auszulesenden Zelle
pfad = "O:\Groupshares\Projekt 1\04_Subvendors"
datei = "QC_Projekt1.xlsm"
blatt = "Project Overview"
Set bereich = Range("A24:X35")
'** Bereich auslesen
For Each zelle In bereich
'** Zellen umwandeln
zelle = zelle.Address(False, False)
'** Eintragen in Bereich
ActiveSheet.Cells(zelle.Row, zelle.Column).Value = GetValue(pfad, datei, blatt, zelle)
Next zelle
End Sub

Gruß
Markus

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte aus versch. geschl. Dateien
09.12.2020 15:02:48
Günther
Moin,
Excel 2013 im kommerziellen Einsatz… ;-( Aber da kannst du ja nichts zu.
Spätestens wenn ihr auf eine aktuellere Version wechselt, wäre Power Query vielleicht das Mittel der Wahl. Jetzt müsstest du dazu ein kostenloses Add-In von MS herunterladen und installieren.
 
Gruß
Günther  |  mein Excel-Blog
AW: Werte aus versch. geschl. Dateien
09.12.2020 15:54:40
volti
Hallo Markus,
probiere mal, ob dieses (ungetestete) Makro Deine Wünsche schon erfolgreich umsetzt:
Code:
[Cc][+][-]

Option Explicit Sub Bereich_auslesen() '** Dimensionierung der Variablen Dim sPfad As String, sDatei As String, sBlatt As String, rBereich As Range Dim Zelle As Object, sProjektname As String Dim iZeile As Long, iOutZeile As Long, OldRow As Long With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With iOutZeile = 14 With ThisWorkbook.Sheets("Liste") If ActiveSheet.Name = .Name Then Exit Sub For iZeile = 15 To 25 iOutZeile = iOutZeile + 1 sProjektname = .Cells(iZeile, "A").Value If sProjektname <> "" Then sPfad = .Cells(iZeile, "B").Value If Right$(sPfad, 1) <> "&bsol;" Then sPfad = sPfad & "&bsol;" sDatei = .Cells(iZeile, "C").Value sBlatt = .Cells(iZeile, "D").Value '** Bereich auslesen ActiveSheet.Cells(iOutZeile, "A").Value = sProjektname Set rBereich = Range("A24:X35") OldRow = 0 For Each Zelle In rBereich If Zelle.Row > OldRow Then OldRow = Zelle.Row iOutZeile = iOutZeile + 1 End If ActiveSheet.Cells(iOutZeile, Zelle.Column).Value _ = GetValue(sPfad, sDatei, sBlatt, Zelle) Next Zelle iOutZeile = iOutZeile + 1 End If Next iZeile End With With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationAutomatic End With MsgBox "Fertig", vbInformation, "Daten einlesen" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Werte aus versch. geschl. Dateien
09.12.2020 15:58:38
volti
Kleines Update:
Code:
[Cc][+][-]

Option Explicit Sub Bereich_auslesen() '** Dimensionierung der Variablen Dim sPfad As String, sDatei As String, sBlatt As String, rBereich As Range Dim Zelle As Object, sProjektname As String Dim iZeile As Long, iOutZeile As Long, OldRow As Long With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With iOutZeile = 14 With ThisWorkbook.Sheets("Liste") If ActiveSheet.Name = .Name Then Exit Sub For iZeile = 15 To 25 iOutZeile = iOutZeile + 1 sProjektname = .Cells(iZeile, "A").Value If sProjektname <> "" Then sPfad = .Cells(iZeile, "B").Value If Right$(sPfad, 1) <> "&bsol;" Then sPfad = sPfad & "&bsol;" sDatei = .Cells(iZeile, "C").Value sBlatt = .Cells(iZeile, "D").Value '** Bereich auslesen ActiveSheet.Cells(iOutZeile, "A").Value = sProjektname Set rBereich = Range("A24:X35") OldRow = 0 For Each Zelle In rBereich If Zelle.Row > OldRow Then OldRow = Zelle.Row iOutZeile = iOutZeile + 1 End If ActiveSheet.Cells(iOutZeile, Zelle.Column).Value _ = GetValue(sPfad, sDatei, sBlatt, Zelle) Next Zelle iOutZeile = iOutZeile + 1 End If Next iZeile End With With Application .ScreenUpdating = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With MsgBox "Fertig", vbInformation, "Daten einlesen" End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Werte aus versch. geschl. Dateien
10.12.2020 06:52:01
Markus
Guten Morgen,
erst einmal vielen Dank für die Antworten. Leider funktioniert das Makro nicht :-(
Es kommt die Fehlermeldung "Fehler beim Kompilieren - Sub oder Function nicht definiert" und das folgende aus der fünftletzten Zeile wird gelb markiert:
= GetValue(spfad, sdatei, sblatt, Zelle)
Danke im Voraus.
Gruß Markus
AW: Werte aus versch. geschl. Dateien
10.12.2020 09:13:52
volti
Hallo Markus,
vielen Dank für Deine Rückmeldung.
Die Fehlermeldung besagt, dass die entsprechende Sub nicht gefunden wurde.
Schau Dir mal Deinen Beitrag an, zu dem Du schreibst, das wäre das aktuelle Makro.
Hier hattest Du die Sub nicht mit aufgeführt, so dass ich annahm, Du hast Dir das gespart.
Woher soll ich nun wissen, welches GetValue-Makro Du da einsetzt.
Und falls Dein bisheriges Makro jemals funktionierte, musst Du diese Sub ja haben.
Aber nun gut, ich habe hier auch einige "GetValue"-Sub's in meiner Bastelkiste. Probiere halt mal dieses hier aus oder poste das, welches Du hast.
Falls das zu langsam sein sollte, sollte man die Bereiche als Block übernehmen, dann müsste man aber die Datei unsichtbar öffnen und die Daten mit GetObject... importieren.
Code:
[Cc]

Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _ ByVal sSheet As String, oTarget As Object) As Variant 'Einen Wert aus einer Datei holen On Error GoTo ErrorHandler If Right$(sPath, 1) <> "&bsol;" Then sPath = sPath & "&bsol;" GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _ & oTarget.Range("A1").Address(, , xlR1C1)) Exit Function ErrorHandler: GetValue = CVErr(xlErrRef) End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Werte aus versch. geschl. Dateien
10.12.2020 09:55:54
Markus
Hallo Karl-Heinz,
daran siehst Du, dass ich von VBA nicht wirklich Ahnung hab ;-)
ZU deinem gesendeten Get-Value-Makro kann ich sagen, dass nichts passiert aber wirklich gar nix...weder eine Eintragung in meiner Übersichtstabelle noch eine Fehlermeldung.
Hier mal das Get-Value-Makro, das ich vorher drin hatte um die Daten zu bekommen:
Private Function GetValue(pfad, datei, blatt, Zelle)
'** Daten aus geschlossener Arbeitsmappe auslesen
'*** Dimensionierung der Variablen
Dim arg As String
'Sicherstellen, dass das datei vorhanden ist
If Right(pfad, 1)  "\" Then pfad = pfad & "\"
If Dir(pfad & datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If
'** Das Argument erstellen
arg = "'" & pfad & "[" & datei & "]" & blatt & "'!" & Range(Zelle).Range("A1").Address(, ,  _
xlR1C1)
'** Auslesen über Excel4Macro
GetValue = ExecuteExcel4Macro(arg)
End Function
Dank Dir im Voraus.
Gruß
Markus
Anzeige
AW: Werte aus versch. geschl. Dateien
10.12.2020 10:54:26
volti
Also Markus,
beide Makros funktionieren und holen die entsprechenden Daten. Dein bisheriges ist ja fast genauso wie meins.
Hast Du denn in der Tabelle "Liste" ab Zeile 15 folgende Daten eingegeben?
A B C D
Projekt1 C:\Pfad1... Datei1.xlsx Blattname1
.....
Code:
[Cc][+][-]

Option Explicit Sub Bereich_auslesen() '** Dimensionierung der Variablen Dim sPfad As String, sDatei As String, sBlatt As String, rBereich As Range Dim Zelle As Object, sProjektname As String Dim iZeile As Long, iOutZeile As Long, OldRow As Long With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationManual End With iOutZeile = 14 With ThisWorkbook.Sheets("Liste") If ActiveSheet.Name = .Name Then Exit Sub For iZeile = 15 To 25 iOutZeile = iOutZeile + 1 sProjektname = .Cells(iZeile, "A").value If sProjektname <> "" Then sPfad = .Cells(iZeile, "B").value If Right$(sPfad, 1) <> "&bsol;" Then sPfad = sPfad & "&bsol;" sDatei = .Cells(iZeile, "C").value sBlatt = .Cells(iZeile, "D").value '** Bereich auslesen ActiveSheet.Cells(iOutZeile, "A").value = sProjektname Set rBereich = Range("A24:X35") OldRow = 0 For Each Zelle In rBereich If Zelle.Row > OldRow Then OldRow = Zelle.Row iOutZeile = iOutZeile + 1 End If ActiveSheet.Cells(iOutZeile, Zelle.Column).value _ = GetValue(sPfad, sDatei, sBlatt, Zelle) Next Zelle iOutZeile = iOutZeile + 1 End If Next iZeile End With With Application .ScreenUpdating = False .EnableEvents = False .Calculation = xlCalculationAutomatic End With MsgBox "Fertig", vbInformation, "Daten einlesen" End Sub Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _ ByVal sSheet As String, oTarget As Object) As Variant 'Einen Wert aus einer Datei holen On Error GoTo ErrorHandler If Right$(sPath, 1) <> "&bsol;" Then sPath = sPath & "&bsol;" GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _ & oTarget.Range("A1").Address(, , xlR1C1)) Exit Function ErrorHandler: GetValue = CVErr(xlErrRef) End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Werte aus versch. geschl. Dateien
10.12.2020 12:34:15
Markus
Hallo Karlheinz,
ja, alles in Zeile 15 eingetragen. und trotzdem funktioniert es nicht. Der einzige Unterschied zu deiner Vorgabe ist, dass meine Datei mit .xlsm endet. Könnte das ein oder der Grund sein, dass das Makro nicht darauf zugreift?
Anbei auch al die Tabelle, vielleicht findest du was... ;-)
https://www.herber.de/bbs/user/142212.xlsm
Gruß
Markus
AW: Werte aus versch. geschl. Dateien
10.12.2020 12:49:12
Markus
ich muss mich glaube ich berichtigen und vielleicht liegt auch hier der Fehler :-(
Wir haben Excel 2016 Professional und nicht 2013! Ich hab es zu spät gesehen...kann es daran liegen, dass hier irgendetwas geändert wurde und es deshalb nicht funktioniert?
Sorry für das Missverständnis.
Gruß
Markus
Anzeige
AW: Werte aus versch. geschl. Dateien
10.12.2020 17:42:28
volti
Hallo Markus,
konnte nicht früher antworten.
Nein es liegt nicht an der Version und auch nicht an der Erweiterung .xlsm.
Ich hatte dem Makro verboten, in das Blatt Liste zu schreiben sondern nur ins aktive Blatt. Dein Button befindet sich aber auf diesem Blatt und damit ist das Blatt Liste das aktive Blatt.
Ich habe das Makro jetzt geändert. Du musst dann allerdings einen Blattnamen vorgeben. Ich habe jetzt mal "Daten" genommen.
Noch etwas: Dein altes Makro aus Modul1 erwartet als Bereichsangabe einen String. Im Modul2 wird dort aber ein Range erwartet. Ich hatte mein GetValue-Makro extra deswegen umgeschrieben.
Sprich: Dein altes GetValue-Makro kann im neuen Makro im Modul2 nicht funktionieren.
Daten übertragen.xlsm
viele Grüße
Karl-Heinz
Anzeige
AW: Werte aus versch. geschl. Dateien
11.12.2020 07:02:48
Markus
Guten Morgen Karlheinz,
was soll ich sagen...absolut perfekt und vielen vielen Dank für Deine Mühe. Ich versuche mich natürlich weiter in meinen VBA-Kenntnissen zu verbessern ;-)
Gruß
Markus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige