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

komplizierte Dateiverknüpfungen

komplizierte Dateiverknüpfungen
Bernd
Hallo,
ich würde gerne in einer Exceldatei Werte über Verknüpfung heranziehen, die aus einer Quelldatei stammen, die den identischen Dateinamen (z.B. test.xls) trägt. Das Quellverzeichnis weist z.B. folgende Struktur auf:
c:\2009\2009_08\05\
Nun möchte ich aus einer Datei (test.xls) die im Verzeichnis
c:\2009\2009_08\19\ liegt (also gestern) gerne Werte aus der identischen Datei aber eben per Stichtag 5.8.09 heranziehen, also genau gestern- 10 Arbeitstage. Lässt sich sowas automatisieren per VBA? Idealerweise sollte der Code selbständig den Dateipfad ermitteln und zwar in dem er einfach im DateiExplorer 10 Datumseinträge rückwärts zählt, dabei würde die Feiertagsproblematik außen vor bleiben.
Als Anlage habe ich eine Musterdatei erstellt mit Beispielsformeln:
https://www.herber.de/bbs/user/63966.xls
Viele Grüße
Bernd
AW: komplizierte Dateiverknüpfungen
20.08.2009 15:49:08
Rudi
Hallo,
das ist aber sehr kompliziert.
Was ist denn bei Monats- oder sogar Jahresübergreifenden Verknüpfungen?
Da hast du richtig was zu denken.
Ich würde mir ein anderes Ablagesystem überlegen.
Gruß
Rudi
AW: komplizierte Dateiverknüpfungen
20.08.2009 22:38:44
Bernd
Hallo Rudi,
leider ist es so kompliziert mit der Struktur. Ich bearbeite täglich eine bestimmte Datei und die muss auch so täglich archiviert werden. Die Ordnerstruktur erschien mir so recht logisch.
Aber ich bin natürlich für Verbesserungsvorschläge gerne offen, wenn das die Sache erleichten würde. Wie gesagt, Vorgabe ist, dass die Datei täglich historisiert werden muss und ich auf eine frühere Datei (die zehntletzte Datei) zurückgreifen muss.
Hast Du eine Idee, wie man verbessern kann?
Gruß
Bernd
Anzeige
AW: komplizierte Dateiverknüpfungen
20.08.2009 15:51:55
{Boris}
Hi Bernd,
mit ein klein wenig Handarbeit kannst Du das auch ohne VBA erledigen - nach diesem Muster: http://excelformeln.de/tips.html?welcher=107
Alles andere kann wirklich kompliziert werden (wie von Rudi bereits geschrieben).
Grüße Boris
AW: komplizierte Dateiverknüpfungen
20.08.2009 22:42:04
Bernd
Hallo Boris,
vielen Dank für den konstruktiven Vorschlag. Ich werde mir das morgen mal genauer anschauen, vielleicht lässt sich das wirklich auch nutzen.
Ansonsten lasse ich Frage noch offen, vielleicht hat ja noch einer einen genialen Einfall für dieser zugegebenermassen komplizierte Problem...
Gruß
Bernd
Anzeige
AW: komplizierte Dateiverknüpfungen
21.08.2009 00:50:40
Josef
Hallo Bernd,
ist gar nicht so kompliziert.
Sub GetValuesFromFile()
  Dim strRoot As String, strFile As String, strTab As String, strDate As String, strSource As String
  
  strRoot = "C:\" 'Stamm-Pfad
  strFile = "test.xls" 'Dateiname
  strTab = "Analyse" 'Tabellenname
  
  strDate = Format(Date - 10, "yyyy\\yyyy_MM\\dd")
  
  If Right(strRoot, 1) <> "\" Then strRoot = strRoot & "\"
  
  strSource = "'" & strRoot & strDate & "\[" & strFile & "]" & strTab & "'!"
  
  Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "B:B,MATCH(A2," & strSource & "A:A,0))"
  Range("E2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "C:C,MATCH(A2," & strSource & "A:A,0))"
  Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  
End Sub


Gruß Sepp

Anzeige
AW: komplizierte Dateiverknüpfungen
21.08.2009 09:47:06
D.Saster
Hallo Sepp,
strDate = Format(Date - 10, "yyyy\\yyyy_MM\\dd")

Damit ignorierst du aber freie Tage. Den Pfad gibt es unter Umständen nicht.
Gruß
Dierk
AW: komplizierte Dateiverknüpfungen
21.08.2009 14:23:17
Bernd
Hallo Sepp,
die Lösung sind schon mal ganz gut aus! Nur wie Dierk auch richtigerweise bemerkt hat, werden freie Tage leider nicht berücksichtigt. Am sichersten wäre es halt wenn "einfach" rückwärs gezählt würde, so wie es auch derzeit manuell im Datei-Explorer anhand der Ordner mache!
Es wäre echt toll, wenn das irgendwie doch noch lösbar ist. Könnte mam die Sache vereinfachen, wenn ich bei Anlage der Tagesordner mit anderem System/Schema vorgehe?
Gruß
Bernd
Anzeige
AW: komplizierte Dateiverknüpfungen
22.08.2009 19:14:52
Josef
Hallo Bernd,
probier mal so, allerdings wird der Jahreswechsel nicht berücksichtigt!
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub GetValuesFromFile()
  Dim objFiles() As Object, lngResult As Long
  Dim strRoot As String, strFile As String, strTab As String
  Dim strPath As String, strSource As String
  
  strRoot = "C:\2009\" 'Stamm-Pfad
  strFile = "test.xls" 'Dateiname
  strTab = "Analyse" 'Tabellenname
  
  
  If Right(strRoot, 1) <> "\" Then strRoot = strRoot & "\"
  
  lngResult = FileSearchINFO(objFiles, strRoot, strFile, True)
  
  If lngResult >= 9 Then
    
    strPath = objFiles(UBound(objFiles) - 9).ParentFolder
    
    strSource = "'" & strPath & "\[" & strFile & "]" & strTab & "'!"
    
    Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "B:B,MATCH(A2," & strSource & "A:A,0))"
    Range("E2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "C:C,MATCH(A2," & strSource & "A:A,0))"
    Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  Else
    Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row) = "Datei nicht gefunden"
    Range("E2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = "Datei nicht gefunden"
  End If
  
End Sub

'by J.Ehrensberger
Private Function FileSearchINFO(ByRef Files() As Object, ByVal InitialPath As String, Optional ByVal FileName As String = "*", _
    Optional ByVal SubFolders As Boolean = False) As Long

  
  '# PARAMETERINFO:
  '# Files: Datenfeld zur Ausgabe der Suchergebnisse
  '# InitialPath: String der das zu durchsuchende Verzeichnis angibt
  '# FileName: String der den gesuchten Dateityp oder Dateinamen enthält (Optional, Standard="*.*" findet alle Dateien)
  '# Beispiele: "*.txt" - Findet alle Textdateien
  '# "*name*" - Findet alle Dateien mit "name" im Dateinamen
  '# "*.avi;*.mpg" - Findet .avi und .mpg Dateien (Dateitypen mit ; trennen)
  '# SubFolders: Boolean gibt an, ob Unterordner durchsucht werden sollen (Optional, Standard=False)
  
  
  Dim fobjFSO As Object, ffsoFolder As Object, ffsoSubFolder As Object, ffsoFile As Object
  Dim intC As Integer, varFiles As Variant
  
  Set fobjFSO = CreateObject("Scripting.FileSystemObject")
  
  Set ffsoFolder = fobjFSO.GetFolder(InitialPath)
  
  On Error GoTo ErrExit
  
  If InStr(1, FileName, ";") > 0 Then
    varFiles = Split(FileName, ";")
  Else
    Redim varFiles(0)
    varFiles(0) = FileName
  End If
  For Each ffsoFile In ffsoFolder.Files
    If Not ffsoFile Is Nothing Then
      For intC = 0 To UBound(varFiles)
        If LCase(fobjFSO.GetFileName(ffsoFile)) Like LCase(varFiles(intC)) Then
          If IsArray(Files) Then
            Redim Preserve Files(UBound(Files) + 1)
          Else
            Redim Files(0)
          End If
          Set Files(UBound(Files)) = ffsoFile
          Exit For
        End If
      Next
    End If
  Next
  
  If SubFolders Then
    For Each ffsoSubFolder In ffsoFolder.SubFolders
      FileSearchINFO Files, ffsoSubFolder, FileName, SubFolders
    Next
  End If
  
  If IsArray(Files) Then FileSearchINFO = UBound(Files) + 1
  ErrExit:
  Set fobjFSO = Nothing
  Set ffsoFolder = Nothing
End Function

Gruß Sepp

Anzeige
AW: komplizierte Dateiverknüpfungen
24.08.2009 13:59:47
Bernd
Hallo Sepp,
danke erstmal, dass Du dich an der schwierigen Variante nochmals versucht hast. Sieht wirklich ziemlich gut aus, was meine ersten Tests anbelangt! Wie ich in einer Ergänzung meiner Anfrage angedeutet hatte, wäre eine Variante, bei der man das betreffende Datum der Quelldatei selbst vorgibt (per Popup-Abfrage idealerweise) durchaus auch möglich und wahrscheinlich deutlich einfacher. Wie müsste man den Code ändern, damit beim Starten des Codes ein Datum als Vorgabe für die Quelldatei abgefragt wird?
Viele Grüße und schönen Dank schon mal!
Bernd
AW: komplizierte Dateiverknüpfungen
24.08.2009 18:43:37
Josef
Hallo Bernd,
dann wäre es wohl am einfachsten, wenn man einfach einen Ordnerdialog aufruft und den entsprechenden Ordner per Hand auswählt.
Gruß Sepp

Anzeige
AW: komplizierte Dateiverknüpfungen
24.08.2009 21:22:11
Bernd
Hallo Sepp,
ja ich denke, das wäre die allgemeingültigste Lösung, bei der man als Anwender zwar mehr "denken" muss, andererseits bietet sich so eine Lösung eher an für Leute, die mit VBA nichts am Hut haben und die den "Code" gar nicht sehen/editieren wollen. Ordnerdialoge sind ja Deine "Spezilität", darf ich Dich da nochmals um Hilfe bitten?
Vielen Dank
Gruß
Bernd
AW: komplizierte Dateiverknüpfungen
24.08.2009 21:27:00
Josef
Hallo Bernd,
' **********************************************************************
' Modul: Modul2 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub GetValuesFromFile()
  Dim strRoot As String, strFile As String, strTab As String
  Dim strPath As String, strSource As String
  
  strRoot = "C:\" 'Stamm-Pfad
  strFile = "test.xls" 'Dateiname
  strTab = "Analyse" 'Tabellenname
  
  strPath = fncBrowseForFolder(strRoot)
  
  If strPath <> "" Then
    strSource = "'" & strPath & "\[" & strFile & "]" & strTab & "'!"
    
    Range("D2:D" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "B:B,MATCH(A2," & strSource & "A:A,0))"
    Range("E2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Formula = "=INDEX(" & strSource & "C:C,MATCH(A2," & strSource & "A:A,0))"
    Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row).Value
  Else
    Range("D2:E" & Cells(Rows.Count, 1).End(xlUp).Row) = ""
  End If
  
End Sub

Private Function fncBrowseForFolder(Optional ByVal defaultPath = "") As String
  Dim objFlderItem As Object, objShell As Object, objFlder As Object
  
  Set objShell = CreateObject("Shell.Application")
  Set objFlder = objShell.BrowseForFolder(0&, "Ordner auswählen...", 0&, defaultPath)
  
  If objFlder Is Nothing Then GoTo ErrExit
  
  Set objFlderItem = objFlder.Self
  fncBrowseForFolder = objFlderItem.Path
  
  ErrExit:
  
  Set objShell = Nothing
  Set objFlder = Nothing
  Set objFlderItem = Nothing
End Function

Gruß Sepp

Anzeige
Tausend Dank!
24.08.2009 21:40:16
Bernd
Hallo Sepp,
das ging ja rasend schnell! Besten Dank nochmal und sorry für die am Schluss doch veränderte Fragestellung!
Vielleicht noch eine Frage, nachdem die anderen Leute hier teilweise die Struktur der Verzeichnisse in Frage gestellt haben. Wie ist Deine Sicht der Dinge, könnte ich da was vereinfachen, dass aber trotzdem die Übersicht gewahrt bleib in der Form, dass die Tagesordner im Explorer chronologisch auftauchen sollten.
Viele Grüße und schönen Abend
Bernd
AW: Tausend Dank!
24.08.2009 21:49:03
Josef
Hallo Bernd,
brauchst du wirklich für jeden Tag einen Ordner?
Wenn nicht, dann würde ich alle Dateien in einen Ordner packen und die Dateien nach dem
Schema "JJJJ_MM_TT_Name.xls" benennen.
Dann sind die Dateien im Explorer Chronologisch geordnet und auch per VBA kann man relativ leicht
auf das entsprechende Datum zugreifen.
Gruß Sepp

Anzeige
Änderungsvorschlag!!!
21.08.2009 15:20:21
Bernd
Hallo,
mir wäre auch schon geholfen, wenn man in dem Sheet, wo die historischen Daten angezogen werden, man das rückwärtige Datum in eine bestimmte Zelle manuell eingeben würde, z. B. Zelle A1 und dann die Werte aufgrund dieses Datum aus der entsprechenden historische Quelle gemäß dieser Datumsvorgabe abgezogen werden würde. Dann könnte man die Feiertags-/Wochenendproblematik komplett ausschalten.
Viele Grüße
Bernd
AW: komplizierte Dateiverknüpfungen
20.08.2009 23:54:35
Uduuh
Hallo,
warum speicherst du die Dateien nicht in einem Ordner nach dem Motto Test_JJJJMMTT.xls ?
das würde die Sache vereinfachen.
Gruß aus’m Pott
Udo

Anzeige
AW: komplizierte Dateiverknüpfungen
21.08.2009 14:29:32
Bernd
Hallo Udo,
danke für den Hinweis. Als ich die Verzeichnisstruktur vor Jahren mal so begonnen hatte, wusste ich leider noch nicht, dass
a.) man mit VBA soviel "machen" kann
b.) die Datei im Laufe der Jahre immer komplizierter wird, insbesondere durch die neuerdings leider notwendigen Vergleiche mit Altdaten.
Aber ich wäre schon bereit das "liebgewordene" Schema aufzugeben, wenn das die Sache entscheidend vereinfacht. Wenn ich mein Schema gemäß Vorschlag ändern würde, wie könnte man dann vorgehen?
Viele Grüße
Bernd

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige