简体   繁体   English

使用vba打开上次修改的Excel电子表格

[英]open last modified excel spreadsheet using vba

I have the following code that i have used to open the last modified CSV file, and have literally just changed the path name and extension, but it now doesnt work, would appreciate any pointers on where i am going wrong: 我有以下代码,我用来打开上一个修改过的CSV文件,并且字面上只是改变了路径名和扩展名,但它现在不起作用,我会感谢任何有关我出错的指针:

Code i am using: 我正在使用的代码:

Sub ReceiptTest()

    On Error Resume Next
    With Application.FileSearch
    .LookIn = "\\K123456\shared\IT Public\ReceiptsETE\Archive\": .Filename = "*.XLS*"
    .Execute msoSortByLastModified, msoSortOrderDescending
    For FF = 1 To .FoundFiles.Count
    If FileDateTime(.FoundFiles(FF)) > LastModDate Then
    LastModDate = FileDateTime(.FoundFiles(FF))
    lmf = .FoundFiles(FF)
    End If
    Next
    End With
    Workbooks.Open (lmf)

    End Sub

Thanks 谢谢

If you're trying to open a CSV, then your filename should be .csv , not xls. 如果您尝试打开CSV,那么您的文件名应该是.csv ,而不是xls。 Here's how I do it. 这是我如何做到的。 You need to set a reference to Microsoft Scripting Runtime. 您需要设置对Microsoft Scripting Runtime的引用。 It will work even when you upgrade from 2003 即使从2003年升级,它也能正常工作

Sub OpenCSV()

    Dim sFldr As String
    Dim fso As Scripting.FileSystemObject
    Dim fsoFile As Scripting.File
    Dim fsoFldr As Scripting.Folder
    Dim dtNew As Date, sNew As String

    Const sCSVTYPE As String = "Microsoft Office Excel Comma Separated Values File"

    Set fso = New Scripting.FileSystemObject

    sFldr = "C:\Documents and Settings\dick\My Documents\QBExport\"

    Set fsoFldr = fso.GetFolder(sFldr)

    For Each fsoFile In fsoFldr.Files
        If fsoFile.DateLastModified > dtNew And fsoFile.Type = sCSVTYPE Then
            sNew = fsoFile.Path
            dtNew = fsoFile.DateLastModified
        End If
    Next fsoFile

    Workbooks.Open sNew

End Sub

I cannot test your code as I am using Execl 2010 and Application.FileSearch isn't supported. 我无法测试您的代码,因为我使用的是Execl 2010和Application.FileSearch不受支持。

I use this to find the latest modified file... 我用它来查找最新的修改文件...

Sub GetLatestFile()

Dim strFolder  As String
Dim strFile    As String
Dim latestFile As String
Dim dtLast     As Date

'   assign variables
    strFolder = "C:\" 'The end of this path must have a \ on it
    strFile = Dir(strFolder & "\*.*", vbNormal)    ' Any File
'   strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files
'   strFile = Dir(strFolder & "\*.csv", vbNormal)  ' CSV Files

'   loop through files to find latest modified date
    Do While strFile <> ""
        If FileDateTime(strFolder & strFile) > dtLast Then
            dtLast = FileDateTime(strFolder & strFile)
            latestFile = strFolder & strFile
        End If
        strFile = Dir
    Loop

    MsgBox latestFile

End Sub

Ok, I got this to work using Conman's code above with a few modification (I made changes to his code and they will be reflected if they get approved). 好吧,我使用上面的Conman代码进行了一些修改(我对其代码进行了更改,如果它们获得批准,它们将被反映)。 Here is his code with those changes: 这是他的代码与这些变化:

Sub GetLatestFile()

Dim strFolder  As String
Dim strFile    As String
Dim latestFile As String
Dim dtLast     As Date

'   assign variables
    strFolder = "C:\your\file\path\goes\here\" 'the path of the file drop folder (you need the final "\" on the directory
    strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files
'   strFile = Dir(strFolder & "\*.csv", vbNormal)  ' CSV Files
'   strFile = Dir(strFolder & "\*.*", vbNormal)    ' Any File

'   loop through files to find latest modified date
    Do While strFile <> ""
        If FileDateTime(strFolder & strFile) > dtLast Then
            dtLast = FileDateTime(strFolder & strFile)
            latestFile = strFolder & strFile
        End If
        strFile = Dir
    Loop

    MsgBox latestFile

End Sub

You can also set strFolder by using a file dialogue and passing it into the above sub. 您还可以使用文件对话框设置strFolder并将其传递给上面的子对象。 Here is an example: 这是一个例子:

Sub ChooseFolder()
    Dim fd As Office.FileDialog
    Dim strFolder As String

    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    With fd
        If .Show Then
            strFolder = .SelectedItems(1)
        End If
    End With

    GetLatestFile strFolder

End Sub

Sub GetLatestFile(strFolder  As String)

Dim strFile    As String
Dim latestFile As String
Dim dtLast     As Date

'   assign variables
    strFolder = strFolder & "\"
    strFile = Dir(strFolder & "\*.xls*", vbNormal) ' Excel Files
'   strFile = Dir(strFolder & "\*.csv", vbNormal)  ' CSV Files
'   strFile = Dir(strFolder & "\*.*", vbNormal)    ' Any File

'   loop through files to find latest modified date
    Do While strFile <> ""
        If FileDateTime(strFolder & strFile) > dtLast Then
            dtLast = FileDateTime(strFolder & strFile)
            latestFile = strFolder & strFile
        End If
        strFile = Dir
    Loop

    MsgBox latestFile

End Sub

I just tested both chucks of code and they work for me. 我刚测试了两个代码,它们对我有效。 Let me know if you can't get them to work. 如果你不能让他们工作,请告诉我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM