Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Teil eines Dateiname aus einer Zelle lesen

Teil eines Dateiname aus einer Zelle lesen
02.01.2008 17:18:50
Rose
Hallo Leute,
nach eingehender Recherche im Archiv, habe nicht die richtige Lösung gefunden.
Daher:
Ich suche nach einer VBA-Lösung mit der ich Werte (Text) aus verschiedenen Excel-Dateien auslesen kann. Dabei soll aber nur nach den Dateien gesucht werden, deren Dateiname gleich dem Text einer Zelle entsprechen. Erschwerend kommt hinzu, dass nur ein Teil des Dateinamens in der Zelle angegeben ist.
Beispiel:
In der Zieldatei (Projekt_007.xls) steht in Zelle A19 der Text „S_734“, der gesuchte Wert für die Zelle D19 steht in der Datei P_007_S_734_G_1.xls in der Zelle D10. Des Weiteren benötige ich für „S_734“ für die Zellen F19, H19, J19 und L19 auch die Werte aus den Dateien P_007_S_734_G_2 bis P_007_S_734_G_5 (also G wird um eins hoch gezählt).
Die Dateien P_007_S_734_G_1 bis P_007_S_734_G_5 stehen nicht in dem gleichen Verzeichnis wie Projekt_007.xls, ist das ein Problem?
Dies soll dann für weitere Dateien erfolgen, die in der Spalte A unterhalb von A19 bis A 50 stehen. Ergeben sich Probleme, wenn nicht in allen Zellen der Spalte A Wert stehen?
Wenn ich mein Problem nicht deutlich genug dargestellt habe, dann gebt mir bitte kurz Rückmeldung.
Viele Dank im Voraus für eure Hilfe
M. Rose

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teil eines Dateiname aus einer Zelle lesen
02.01.2008 18:48:00
Erich
Hallo M.,
damit könnte es gehen:

Option Explicit
Sub test()
Dim strMapp As String, zz As Long, cc As Integer, ii As Integer
Const strVz As String = "C:\temp\" ' Quellverzeichnis anpassen
For zz = 19 To 50
ii = 1
For cc = 4 To 12 Step 2
If Cells(zz, 1) > "" Then
strMapp = "P_007_" & Cells(zz, 1) & "_G_" & ii & ".xls" ' P_007_S_734_G_1.xls
If Dir(strVz & strMapp) > "" Then
With Cells(zz, cc)
.Formula = "='" & strVz & "[" & strMapp & "]" & Worksheets(1).Name & "'!D10"
.Value = .Value
End With
Else
MsgBox strVz & strMapp & vbLf & "wurde nicht gefunden"
End If
ii = ii + 1
End If
Next cc
Next zz
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Teil eines Dateiname aus einer Zelle lesen
02.01.2008 22:01:00
Rose
Hallo Erich,
danke für deine schnelle Hilfe. Das Marko funktioniert und liefert das Gewünschte. Leider ist die Performance nicht die Beste. Hast du noch einen Tipp, um die Performance zu erhöhen.
Kann man das Marko auch so schreiben, dass es automatisch bei öffnen der Datei Projekt_007.xls ausgeführt wird und dass es in bestimmten Zeitintervallen wieder automatisch ausgeführt wird?
Danke nochmals für die Hilfe!!!
Viele Grüße aus dem Norden
Matze

AW: Teil eines Dateiname aus einer Zelle lesen
02.01.2008 23:48:00
Rose
Hallo Erich,
die Performnace war sofort da, als ich das AddIn für die Bedingte Formatierung (xlsCFPlus) rausgenommen habe. Ich werde jetzt die Formatierung der Zelle in dem Marko miteinbinden oder hast du eine Idee, wie ich das AddIn erst am Ende der Aktualisierung ausführen lasse.
Nochmal Danke und Sorry, wegen des AddIn!
Viele Grüße
Matze

Anzeige
AW: Teil eines Dateiname aus einer Zelle lesen
03.01.2008 19:40:29
Erich
Hallo Matze,
das Performanceproblem ist ja gelöst. Ich kenne CFPlus nicht, und ich weiß nicht, wie du es nutzt.
Deshalb kann ich dir auch keinen Tipp geben, ob und wie du das AddIn optimal ausführen lässt.
Damit die Prozedur automatisch beim Öffnen der Mappe ausgeführt wird,
brauchst du in das Modul der Arbeitsmappe nur zu schreiben:

Private Sub Workbook_Open()
test  ' Name der Prozedur
End Sub

Zur wiederholten Ausführung könntest du dir OnTime in der VBA-Hilfe anschauen
und hier im Forumsarchiv nach OnTime suchen. Dazu gibt es schon viele Beiträge.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Teil eines Dateiname aus einer Zelle lesen
04.01.2008 16:52:42
Rose
Hallo Erich,
danke für deine Hilfe. Dickes Lob.
Das Addin habe ich mittlerweile durch eigene Codezeilen ersetzt, da es nicht immer stabil lief.
Eine Frage habe ich zu deiner Lösung "Teil eines Dateinamen". Du hast ja den absoluten Pfad für strVz (Quellverzeichnis) verwendet und als Konstante deklariert.
Const strVz As String = "C:\temp\" ' Quellverzeichnis anpassen
Nun wollte ich der Konstanten strVz den aktuellen Pfad des Workbooks plus dem Unterverzeichnis (gibt nur eins) zuweisen, in dem ich folgende Möglichkeiten codierte:
Const strVz As String = ThisWorkbook.Path & "\XYZ\"
Const strVz As String = ThisWorkbook.Path & SubFolders
Beim Kompilieren erhalte ich die Fehlermeldung, dass ein konstanter Wert erwartet wird (.path ist hinterlegt). Offensichtlich ist .path nicht als Konstante geeignet, aber warum.
strVz als Variable zu nutzen hat nicht funktioniert, da die For-Schleife dann nicht durchlaufen wird.
Auch musste ich feststellen, als ich versuchte das Ergebnis der Anweisung (ohne Konstante) in eine Zelle zu schreiben, dass die Anweisungen nicht funktionierten. Irgendwie bin ich auf dem Holzweg!!!
Kannst du mir einen Tipp geben, wie ich den relativen Pfad & Unterverzeichnis als Konstante an die For-Schleife übergebe. Dann kann ich deine Lösung universeller nutzen.
Danke und viele Grüße
Matze

Anzeige
AW: Teil eines Dateinamens aus Zelle lesen
04.01.2008 17:30:00
Erich
Hi Matze,
"ThisWorkbook.Path" ist keine Konstante, sondern hängt nun mal davon ab, wo eine Datei gespeichert ist.
Also: Dim strVz as String und später strVz=...
Versuchs mal so:

Option Explicit
Sub test2()
Dim strMapp As String, zz As Long, cc As Integer, ii As Integer
Dim strVz As String
strVz = ThisWorkbook.Path & "\xyz\"        ' Unterverzeichnis anpassen
For zz = 19 To 50
ii = 1
For cc = 4 To 12 Step 2
If Cells(zz, 1) > "" Then
strMapp = "P_007_" & Cells(zz, 1) & "_G_" & ii & ".xls" ' P_007_S_734_G_1.xls
If Dir(strVz & strMapp) > "" Then
With Cells(zz, cc)
.Formula = "='" & strVz & "[" & strMapp & "]Tabelle1'!D10"
.Value = .Value
End With
Else
MsgBox strVz & strMapp & vbLf & "wurde nicht gefunden"
End If
ii = ii + 1
End If
Next cc
Next zz
End Sub

Geändert habe ich hier auch die .Formula-Zeile.
Worksheets(1).Name gibt den Namen des ersten Blattes der gerade aktiven Mappe wieder,
also der Mappe, in der dieser Code steht.
Das hat nichts zu tun mit den (hier unbekannten) Blättern der Quellmappen.
Die neue Version geht davon aus, dass der Wert von D10 immer aus dem Quellblatt "Tabelle1" geholt werden soll.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Teil eines Dateiname aus einer Zelle lesen
03.01.2008 11:03:00
Rose
Hallo,
Hatte vergessen, die Frage als offen zu markieren. (grrrr, *$§...)
Viele Grüße
Matze

361 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige