为什么会出现编译错误:预期结束子

时间:2018-06-29 20:02:33

标签: excel vba

我有以下vba代码,当我尝试运行它时,它说:编译错误:预期的结束子。

有人知道我在做什么错吗?我对vba一无所知。我想让它检查最后修改的文件,然后告诉我它在msgbox中是否已存在5年以上。

Sub LastModifiedFile()

Function FileLastModified(strFullFileName As String)
    Dim fs As Object, f As Object, s As String

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(strFullFileName)

    s = UCase(strFullFileName) & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified
    FileLastModified = s

    Set fs = Nothing: Set f = Nothing

If FileExists(strFullName) Then
        MsgBox FileLastModified(strFullName)
    Else
        MsgBox "File Older than 5 Years : " & vbNewLine & strFullName
    End If

End Function

End Sub

1 个答案:

答案 0 :(得分:1)

该代码无法按原样工作。您使函数中的代码与过程中的代码相互交织。

第一行定义您的过程:

  Sub LastModifiedFile()

您将获得与该功能相关的代码。
这段代码应该找出传递给它的每个文件名的最后修改日期,并将该日期返回给主过程...您可以从上一行第二行看到FileLastModified = s。这是将值传递回调用过程的那一行。

Function FileLastModified(strFullFileName As String)
    Dim fs As Object, f As Object, s As String

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(strFullFileName)

    s = UCase(strFullFileName) & vbCrLf
    s = s & "Last Modified: " & f.DateLastModified
    FileLastModified = s

    Set fs = Nothing: Set f = Nothing

接下来,您将从主过程中再次获得一些代码。
您可以在第二行看到要求FileLastModified函数查看传递给它的文件的路径。
这里有一个问题-第一行正在调用名为FileExists(strFullName)的函数。这会将文件路径传递给您尚未发布的函数,询问该文件是否首先存在-它应该返回TRUE或FALSE。
这里的另一个问题是,如果找不到文件,则说明文件已存在五年以上,而不是根本说文件不存在。

If FileExists(strFullName) Then
        MsgBox FileLastModified(strFullName)
    Else
        MsgBox "File Older than 5 Years : " & vbNewLine & strFullName
    End If

在这段代码之后,有两行-一端结束函数,另一端结束子程序。

End Function

End Sub  

您的代码应如下所示:

Sub LastModifiedFile()

    'Check if File Exists using `FileExists` function.
    If FileExists(strFullName) Then
        'If it does exist then pass the path to see when it was last modified.
        MsgBox FileLastModified(strFullName)
    Else
        'If it doesn't exist then say it's older than 5 years.
        MsgBox "File Older than 5 Years : " & vbNewLine & strFullName
    End If

End Sub

Function FileLastModified(strFullFileName As String)

    Dim fs As Object, f As Object, s As String

    Set fs = CreateObject("Scripting.FileSystemObject")

    'Returns a file object.
    Set f = fs.GetFile(strFullFileName)

    s = UCase(strFullFileName) & vbCrLf

    'f.DateLastModified returns the modified date of the file object.
    s = s & "Last Modified: " & f.DateLastModified

    'Pass the string variable back to whatever called it.
    FileLastModified = s

    Set fs = Nothing: Set f = Nothing

End Function  

尽管如此,您仍然需要FileExists函数的代码。