Utolsó mentési dátum keresés

Utolsó mentési dátum keresés
2020-02-25T23:50:28+01:00
2020-02-27T12:17:56+01:00
2022-10-15T21:21:41+02:00
Brandbalu
Sziasztok,

egy mappában több excel fájl található. VBA Makró segítségével szeretném kiválasztani a legutolsó mentési dátumot.

ActiveWorkbook.BuiltinDocumentProperties segítségével csak akkor tudom megkeresni az utolsó mentés dátumát, ha a fájl meg van nyitva.

FileDateTime segítségével az utolsó módosítás dátumát tudom elérni, ami nem egyezik meg az utolsó mentés dátumával.

A fenti kérdésemre nem találok megfelelö megoldást ezért fordulok hozzátok.

köszi
Balu
Mutasd a teljes hozzászólást!
Szia!

Ha még érdekel a téma, találtam egy kódot, amit kicsit megpiszkálva működik a VBA-ban is:

Private Sub Utolsomentes() Dim objFolder As Object, objFolderItem As Object, szItem As String Set objFolder = CreateObject("Shell.Application").Namespace("C:\Users\user\Documents") 'ez a könyvtár If (Not objFolder Is Nothing) Then Set objFolderItem = objFolder.ParseName("proba.txt")'ez a fájl név If (Not objFolderItem Is Nothing) Then szItem = objFolder.getdetailsof(objFolderItem, 154) 'ez adja vissza az utolsó mentés dátumát If szItem = "" Then'ha csak egyszer lett mentve, akkor az előző paraméter üres szItem = objFolder.getdetailsof(objFolderItem, 3) 'és az utolsó mentés megegyezik az utolsó módosítás dátumával Else szItem = Left(Mid(szItem, 2), 5) & Mid(szItem, InStr(szItem, " ") + 2, 3) & Mid(szItem, InStr(8, szItem, " ") + 2, 3) & " " & Mid(szItem, InStr(13, szItem, " ") + 3) End If MsgBox "Utolsó mentés: " & szItem End If Set objFolderItem = Nothing End If Set objFolder = Nothing End Sub
Üdv.
Ps.
Itt volt az eredeti példa, amiből kiindultam
Mutasd a teljes hozzászólást!

  • A

    GetLastWriteTime()
    segít valamennyire ?
    Mutasd a teljes hozzászólást!
  • Szia!

    A FileDateTime az utolsó mentés dátumát mutatja egyébként, akkor is ha a fájl nem változott és rámentesz,  az az időpont kerül ebbe a paraméterbe, amikor mentettél. 

    Üdv.
    Mutasd a teljes hozzászólást!
  • Ha E-Mailben kapok egy Excel fájlt, amit átnevezve lementek, akkor az utolsó módosítás dátuma az általam történt mentés dátuma. Ezt adja meg a FileDateTime.
    De, a fájl utolsó mentésének dátuma más. És nekem e szerint kell keresnem.

    Egy adott partnertöl kapok egy E-Mailt melléklettel, amit az Oulookból automatikusan (átnevezve) lementek. Majd két órával késöbb kapok egy újabb E-Mailt, mert pár korrekciót hajtott végre. Ezt is lementem ugyanazon a néven, de egy plussz kiterjesztéssel (pl. fájl-1).
    Ha reggel ezt egyszerre hajtom végre, akkor a két E-Mail melléklet egyszerre kerül mentésre. Nem minden esetben a fájl-1 lesz az újabb verzió.

    A módosítás dátuma megegyezik. Így nem tudom melyik az aktuális. Az egyetlen különbség az utolsó mentés dátuma. Ezért kell e szerint keresnem az aktuális fájlt.

    Üdv,
    Balu
    Mutasd a teljes hozzászólást!
  • Kipróbáltam, de nem tudom használni. Lehet, hogy ez csak az én tudatlanságom...

    Üdv,
    Balu
    Mutasd a teljes hozzászólást!
  • Szia!

    Azt nem látom, hogy megnyitás nélkül hogyan lehet VBA-ból lekérdezni az utolsó mentés dátumát, de valószínűleg Windows Api hívással.
    Viszont megnyitás után a 

    ThisWorkbook.BuiltinDocumentProperties("Last save time")
    pontosan megmondja az utolsó valódi (excelből végrehajtott) mentés dátumát.
    Egyenlőre ennyit látok, talán segít ez is, bár a megnyitás miatt nyilván lassabb mintha kívülről menne.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Ezt találtam. A helyzet, hogy a Get… amit írtam, c#-s megoldás
    http://dotnetheaven.com/article/get-and-set-file-last-write-time-using-vb.net Sub Main() ' Get and set file last write time Dim fileName As String = "c:\temp\Mahesh.txt" File.SetLastWriteTime(fileName, DateTime.Now) Dim dt As DateTime = File.GetLastWriteTime(fileName) Console.WriteLine("File last write time: {0}", dt.ToString()) Console.ReadLine() End Sub
    Mutasd a teljes hozzászólást!
  • Szia!

    Ezzel csak egy icipici baj van. VBA-ban nem működik. Nincsenek ilyen objektumok.

    Üdv.
    Mutasd a teljes hozzászólást!
  • Szia!

    Ha még érdekel a téma, találtam egy kódot, amit kicsit megpiszkálva működik a VBA-ban is:

    Private Sub Utolsomentes() Dim objFolder As Object, objFolderItem As Object, szItem As String Set objFolder = CreateObject("Shell.Application").Namespace("C:\Users\user\Documents") 'ez a könyvtár If (Not objFolder Is Nothing) Then Set objFolderItem = objFolder.ParseName("proba.txt")'ez a fájl név If (Not objFolderItem Is Nothing) Then szItem = objFolder.getdetailsof(objFolderItem, 154) 'ez adja vissza az utolsó mentés dátumát If szItem = "" Then'ha csak egyszer lett mentve, akkor az előző paraméter üres szItem = objFolder.getdetailsof(objFolderItem, 3) 'és az utolsó mentés megegyezik az utolsó módosítás dátumával Else szItem = Left(Mid(szItem, 2), 5) & Mid(szItem, InStr(szItem, " ") + 2, 3) & Mid(szItem, InStr(8, szItem, " ") + 2, 3) & " " & Mid(szItem, InStr(13, szItem, " ") + 3) End If MsgBox "Utolsó mentés: " & szItem End If Set objFolderItem = Nothing End If Set objFolder = Nothing End Sub
    Üdv.
    Ps.
    Itt volt az eredeti példa, amiből kiindultam
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd