Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
904to908
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
904to908
904to908
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Abgleich zw. Ordner und Tabelle

Abgleich zw. Ordner und Tabelle
06.09.2007 11:05:12
Thomas
Hallo liebe Excel-Gemeinde
Ich habe folgende Ausgangslage:
Ich bekomme täglich eine Exceldatei die immer im gleichem Ordner abgelegt wird (Dateiname: KPI_WP-TRX Non-Fonds_070903.xls). Nun habe ich einen Makro welcher mir einzelne Werte aus dieser Datei entnimmt und in ein anderes Excel-Sheet überträgt.
Nun zu meinem Problem:
Es kann nun vorkommen, dass der Makro nicht täglich ausgeführt wird, sondern erst nach 3 Tagen, d.h. es sind 3 noch nicht ausgelesene Dateien vorhanden. Nun hatte ich mir überlegt eine neue Tabelle abzulegen in der hinterlegt wird, welche Dateien aus dem Ordner schon ausgelesen wurden. Folglich benötige ich einen Makro, welcher mir die Liste in der Tabelle mit den Dateinamen in dem besagten Ordner vergleicht und dann gegebenfalls meinen Makro ausführt. Wurde der MAkro ausgeführt sollte der Dateiname in die Liste übernommen werden.
Ich habe den von dem Verzeichnis und der Tabelle Screenshots gemacht wie es aussehen sollte.
Für eure Hilfe wäre ich sehr dankbar!
Grüße
Thomas
Userbild
Userbild

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abgleich zw. Ordner und Tabelle
06.09.2007 12:24:00
Josef
Hallo Thomas,
da wäre es hilfreich, wenn du dein bisheriges Makro zeigen würdest.
Außerdem den Namen der Tabelle in welche die Daten geschrieben werden sollen.
Gruß Sepp

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 12:33:00
Thomas
Hallo Sepp
Danke erstmal für die antwort.
Der Name der Tabelle lautet: Loginfo
Das Sheet lautet:KPI Gesamtbericht WP Trans B2B_Live_Makro_v0.1.xls

Sub Abrechnungsquote()
Dim wotag As String
Dim datumtag As String
Dim quoteB2B As Double
Workbooks.Open Filename:="U:\OpEx\Projekt\TP 3 Prozesse\AP 3.4 Prozessanalyse\0.3  _
Wertpapiertransaktionsprozess\KPI - DWH\Testordner\KPI WP-TRX Fonds_070827.xls"
Sheets("Pivottabelle 7").Select
Range("D4").Select
wotag = Selection.Value
Range("F4").Select
datumtag = Selection.Value
Range("D7").Select
quoteB2B = Selection.Value
Workbooks("KPI WP-TRX Fonds_070827.xls").Close
Windows("KPI Gesamtbericht WP Trans B2B_Live_Makro_v0.1.xls").Activate
Sheets("Abrechnungsquote Fonds").Select
lr = Cells(Rows.Count, 3).End(xlUp).Row + 1
Range("B" & lr).Select
ActiveCell.Formula = wotag
Range("C" & lr).Select
ActiveCell.Formula = datumtag
Range("F" & lr).Select
ActiveCell.Formula = (quoteB2B * 100)
End Sub


Anzeige
AW: Abgleich zw. Ordner und Tabelle
06.09.2007 12:42:00
Josef
Hallo Thomas,
und du änderst jeden Tag den Code um den Dateinamen anzupassen?
Gruß Sepp

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 13:08:00
Thomas
Das ist jetzt nur zu Testzwecken des Makros.
Später muss sich das natürlich anpassen.
Wie ich dieses Problem dann angehe weiß ich auch noch nicht.
Gruß
Thomas

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 13:31:00
Josef
Hallo Thomas,
ich habe angenommen, das der Code in einem Modul der Mappe in die die Daten geschrieben werden steht. Es werden alle Dateien im angegebenen Verzeichnis ausgelesen.
Das Sheet "Logfile" mus existieren. Die Logdaten werden ab Zeile 3 eingetragen. Dateien die bereits im Logfile stehen, werden nicht erneut ausgelesen.
Der Code ist ungetestet, weil ich weder deinen Verzeichnispfad, noch die Dateien nachbauen will!
' **********************************************************************
' Modul: Modul3 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Abrechnungsquote()
Dim objThWB As Workbook, objWb As Workbook
Dim wotag As String, datumtag As String, quoteB2B As Double
Dim a As Variant, objFSO
Dim result As Long, lngI As Long, lngR As Long, lngRow As Long
Dim strFile As String, strPath As String
Dim rng As Range

On Error GoTo ErrExit
GMS

'Pfad der durchsucht werden soll
strPath = "U:\OpEx\Projekt\TP 3 Prozesse\AP 3.4 Prozessanalyse\0.3 Wertpapiertransaktionsprozess\KPI - DWH\Testordner\"

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

'Dateisuche
result = FileSearchFSO(a, strPath, "*.xls", False)

Set objThWB = ThisWorkbook

Set objFSO = CreateObject("Scripting.FileSystemObject")

If result <> 0 Then
    
    lngR = Application.Max(objThWB.Sheets("Loginfo").Cells(Rows.Count, 1).End(xlUp).Row + 1, 3)
    
    For lngI = 0 To UBound(a)
        strFile = objFSO.GetFileName(a(lngI))
        
        'Feststellen ob Datei bereits ausgelesen wurde
        Set rng = objThWB.Sheets("Loginfo").Range("B:B").Find(strFile, LookAt:=xlWhole)
        
        If rng Is Nothing Then
            
            With objThWB.Sheets("Loginfo")
                .Cells(lngR, 1) = Application.Max(.Range("A:A")) + 1
                .Cells(lngR, 2) = strFile
                .Cells(lngR, 3) = Now
                lngR = lngR + 1
            End With
            
            Set objWb = Workbooks.Open(a(lngI))
            
            With objWb.Sheets("Pivottabelle 7")
                wotag = .Range("D4").Value
                datumtag = .Range("F4").Value
                quoteB2B = .Range("D7").Value
            End With
            
            objWb.Close False
            
            With objThWB.Sheets("Abrechnungsquote Fonds")
                lngRow = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                .Cells(lngRow, 2).Formula = wotag
                .Cells(lngRow, 3).Formula = datumtag
                .Cells(lngRow, 6).Formula = (quoteB2B * 100)
            End With
            
        End If
        
    Next
End If

ErrExit:
GMS True

Set objWb = Nothing
Set objThWB = Nothing
Set objFSO = Nothing

End Sub


Private Function FileSearchFSO(ByRef Files As Variant, ByVal InitialPath As String, Optional ByVal FileName As String = "*", _
    Optional ByVal SubFolders As Boolean = False) As Long


Dim objFSO As Object, fsoFolder As Object, fsoSubFolder As Object, fsoFile As Object

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set fsoFolder = objFSO.GetFolder(InitialPath)

On Error Resume Next

For Each fsoFile In fsoFolder.Files
    If Not fsoFile Is Nothing Then
        If LCase(objFSO.GetFileName(fsoFile)) Like LCase(FileName) Then
            If IsArray(Files) Then
                Redim Preserve Files(UBound(Files) + 1)
            Else
                Redim Files(0)
            End If
            Files(UBound(Files)) = fsoFile
        End If
    End If
Next

If SubFolders Then
    For Each fsoSubFolder In fsoFolder.SubFolders
        FileSearchFSO Files, fsoSubFolder, FileName, SubFolders
    Next
End If

If IsArray(Files) Then FileSearchFSO = UBound(Files) + 1
On Error GoTo 0
Set objFSO = Nothing
Set fsoFolder = Nothing
End Function

Sub GMS(Optional ByVal Modus As Boolean = False)
Static lngCalc As Long

With Application
    .ScreenUpdating = Modus
    .EnableEvents = Modus
    .DisplayAlerts = Modus
    .EnableCancelKey = IIf(Modus, 1, 0)
    If Modus Then
        .Calculation = lngCalc
    Else
        lngCalc = .Calculation
    End If
    .Cursor = IIf(Modus, -4143, 2)
    .CutCopyMode = False
End With

End Sub

Gruß Sepp

Anzeige
AW: Abgleich zw. Ordner und Tabelle
06.09.2007 14:10:54
Thomas
Hallo Sepp
Holllla!!!!!!
Ich muss schon sagen ich bin ziemlich baff von der Arbeit die du dir gemacht hast.
Großer Respekt!
Es funktioniert einwandfrei.
Viele Grüße
Thomas

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 14:38:00
Thomas
Hey Sepp
Jetz hab ich doch noch was kleines.
Die Anordnung des Makros erfolgt anhand der Wertigkeit. Ich bräuchte aber eine Anordnung nach dem Datum.
Grüße
Thomas
Userbild

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 14:43:14
Josef
Hallo Thomas,
welche Anordnung?
Meinst du die ausgelesenen Daten? Die kannst du doch sortieren.
Gruß Sepp

Anzeige
AW: Abgleich zw. Ordner und Tabelle
06.09.2007 15:06:00
Thomas
Hey Sepp
In diesem Beispiel wäre die Anordnung:
Mo 27.08.2007 0,35
Di 28.08.2007 0,31
Mi 29.08.2007 4,81
Es wäre auch umgedreht, sprich Mi als erstes, dann Di und dann Mo möglich.
Ist das irgendwie möglich?
Gruß
Thomas

AW: Abgleich zw. Ordner und Tabelle
06.09.2007 17:25:37
Josef
Hallo Thomas,
ich sagte doch, du kannst die Daten doch sortieren!
Ab welcher Zeile stehen den die Daten im Tabellenblatt?
Gruß Sepp

AW: Abgleich zw. Ordner und Tabelle
07.09.2007 08:49:46
Thomas
Hallo Sepp
Ja das hab ich schon gelesen, aber ich weiß leider nicht wie das geht.
Die Daten stehen ab Zeile 47.
Gruß
Thomas

Anzeige
AW: Abgleich zw. Ordner und Tabelle
07.09.2007 19:19:02
Josef
Hallo Thomas,
probier mal.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Abrechnungsquote()
Dim objThWB As Workbook, objWb As Workbook
Dim wotag As String, datumtag As String, quoteB2B As Double
Dim a As Variant, objFSO
Dim result As Long, lngI As Long, lngR As Long, lngRow As Long
Dim strFile As String, strPath As String
Dim rng As Range

On Error GoTo ErrExit
GMS

'Pfad der durchsucht werden soll
strPath = "U:\OpEx\Projekt\TP 3 Prozesse\AP 3.4 Prozessanalyse\0.3 Wertpapiertransaktionsprozess\KPI - DWH\Testordner\"

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

'Dateisuche
result = FileSearchFSO(a, strPath, "*.xls", False)

Set objThWB = ThisWorkbook

Set objFSO = CreateObject("Scripting.FileSystemObject")

If result <> 0 Then
    
    lngR = Application.Max(objThWB.Sheets("Loginfo").Cells(Rows.Count, 1).End(xlUp).Row + 1, 3)
    
    For lngI = 0 To UBound(a)
        strFile = objFSO.GetFileName(a(lngI))
        
        'Feststellen ob Datei bereits ausgelesen wurde
        Set rng = objThWB.Sheets("Loginfo").Range("B:B").Find(strFile, LookAt:=xlWhole)
        
        If rng Is Nothing Then
            
            With objThWB.Sheets("Loginfo")
                .Cells(lngR, 1) = Application.Max(.Range("A:A")) + 1
                .Cells(lngR, 2) = strFile
                .Cells(lngR, 3) = Now
                lngR = lngR + 1
            End With
            
            Set objWb = Workbooks.Open(a(lngI))
            
            With objWb.Sheets("Pivottabelle 7")
                wotag = .Range("D4").Value
                datumtag = .Range("F4").Value
                quoteB2B = .Range("D7").Value
            End With
            
            objWb.Close False
            
            With objThWB.Sheets("Abrechnungsquote Fonds")
                lngRow = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                .Cells(lngRow, 2).Formula = wotag
                .Cells(lngRow, 3).Formula = datumtag
                .Cells(lngRow, 6).Formula = (quoteB2B * 100)
            End With
            
        End If
        
    Next
    
    If lngRow > 0 Then
        With objThWB.Sheets("Abrechnungsquote Fonds")
            .Range(.Cells(47, 2), .Cells(lngRow, 6)).Sort _
                Key1:=.Cells(47, 3), _
                Order1:=xlAscending, _
                Header:=xlNo
        End With
    End If
    
End If

ErrExit:
GMS True

Set objWb = Nothing
Set objThWB = Nothing
Set objFSO = Nothing

End Sub

Gruß Sepp

Anzeige
AW: Abgleich zw. Ordner und Tabelle
09.09.2007 17:15:50
Thomas
Hi Sepp
Danke für deine Mühe.
Kann den Code leider erst morgen testen, aber ich bin zuversichtlich das es funktioniert.
Werde morgen noch mal feedback geben.
Gruß
thomas

AW: Abgleich zw. Ordner und Tabelle
10.09.2007 10:42:46
Thomas
Hey Sepp
Also sie Sortierung funktioniert soweit gut (innerhalb einer Woche), aber er sortiert nicht nach dem
fortlaufenden Datum, sondern nach dem Wochentag. Als ich es getest und eine neue Woche angefangen
habe, hat er mir den Montag nach den vorherigen Montag gestellt.
Ich hab mal noch ne zip-Datei mit einem Beispiel angefügt.
https://www.herber.de/bbs/user/45849.zip
Gruß
Thomas

Anzeige
AW: Abgleich zw. Ordner und Tabelle
10.09.2007 23:31:08
Josef
Hallo Thomas,
das kommt, weil du das Datum als Text in die Tabelle schreibst. Und Text wird nunmal anders sortiert als Zahlen.
Ich habe das jezt umgestellt. Es wird nun das Datum als "echtes" Datum eingetragen.
Die Sortierung sollte jetzt klappen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub Abrechnungsquote()
Dim objThWB As Workbook, objWb As Workbook
Dim wotag As String, datumtag As Date, quoteB2B As Double
Dim a As Variant, objFSO
Dim result As Long, lngI As Long, lngR As Long, lngRow As Long
Dim strFile As String, strPath As String
Dim rng As Range

On Error GoTo ErrExit
GMS

'Pfad der durchsucht werden soll
strPath = "U:\OpEx\Projekt\TP 3 Prozesse\AP 3.4 Prozessanalyse\0.3 Wertpapiertransaktionsprozess\KPI - DWH\Testordner\"

If Right(strPath, 1) <> "\" Then strPath = strPath & "\"

'Dateisuche
result = FileSearchFSO(a, strPath, "*.xls", False)

Set objThWB = ThisWorkbook

Set objFSO = CreateObject("Scripting.FileSystemObject")

If result <> 0 Then
    
    lngR = Application.Max(objThWB.Sheets("Loginfo").Cells(Rows.Count, 1).End(xlUp).Row + 1, 3)
    
    For lngI = 0 To UBound(a)
        strFile = objFSO.GetFileName(a(lngI))
        
        'Feststellen ob Datei bereits ausgelesen wurde
        Set rng = objThWB.Sheets("Loginfo").Range("B:B").Find(strFile, LookAt:=xlWhole)
        
        If rng Is Nothing Then
            
            With objThWB.Sheets("Loginfo")
                .Cells(lngR, 1) = Application.Max(.Range("A:A")) + 1
                .Cells(lngR, 2) = strFile
                .Cells(lngR, 3) = Now
                lngR = lngR + 1
            End With
            
            Set objWb = Workbooks.Open(a(lngI))
            
            With objWb.Sheets("Pivottabelle 7")
                wotag = .Range("D4").Value
                datumtag = CDate(.Range("F4").Value)
                quoteB2B = .Range("D7").Value
            End With
            
            objWb.Close False
            
            With objThWB.Sheets("Abrechnungsquote Fonds")
                lngRow = .Cells(Rows.Count, 3).End(xlUp).Row + 1
                .Cells(lngRow, 2) = wotag
                .Cells(lngRow, 3) = CDate(datumtag)
                .Cells(lngRow, 6) = (quoteB2B * 100)
            End With
            
        End If
        
    Next
    
    If lngRow > 0 Then
        With objThWB.Sheets("Abrechnungsquote Fonds")
            .Range(.Cells(47, 1), .Cells(lngRow, 14)).Sort _
                Key1:=.Cells(47, 3), _
                Order1:=xlDescending, _
                Header:=xlNo
            'Order1:= xlAscendin, _ um aufsteigend zu sortieren.
        End With
    End If
    
End If

ErrExit:
GMS True

Set objWb = Nothing
Set objThWB = Nothing
Set objFSO = Nothing

End Sub

Gruß Sepp

Anzeige
AW: Abgleich zw. Ordner und Tabelle
11.09.2007 14:47:00
Thomas
Hey Sepp,
Also ich weiß du gibst dir die größte Mühe, aber es will einfach nicht funktionieren.
Er sotiert gar nicht, sondern schreibt Zeile für zeile seine Werte. Dabei kommt es auf die Dateigröße an,
d.h. er sucht sich zuertst die kleinste Datei, liest diese aus, schreibt die verschiedenen Werte die die
Tabelle und geht zur nächst größeren über. Zumindest beobachte ich das so.
Gruß
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige