我有以下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
答案 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
函数的代码。