Если заявления - msgbox - PullRequest
0 голосов
/ 02 июля 2018

Я сейчас пытаюсь написать оператор IF, который скажет что-то вроде: Если файлу больше 5 дней, не запускайте макрос. Если возраст более 5 дней, запустите макрос.

Я бы хотел, чтобы это было диалоговое окно «да» или «нет». Вот мой код Пожалуйста помоги. Я все еще пытаюсь выучить этот код VBA.

Sub LastModifiedFile()

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

    dtmodpath = "\\jdshare\pdcmaterials\5_Tools\FTP\Cancelled_Report.txt"
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(dtmodpath)

    's = UCase(strFullFileName) & vbCrLf
    s = f.DateLastModified
    FileLastModified = s

    Set fs = Nothing: Set f = Nothing

Range("E5").Value = FileLastModified

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

'End Function

End Sub

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Используйте функцию DateDiff для подсчета количества дней.

Не совсем понятно, что вы хотите сделать со своим окном сообщения Да / Нет, вот попытка:

Sub LastModifiedFile()

    Dim fs As Object, f As Object, s As String, dtmodpath As String
    Dim dtLastMod As Date
    Dim intDays As Long

    dtmodpath = "\\jdshare\pdcmaterials\5_Tools\FTP\Cancelled_Report.txt"

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(dtmodpath)
    dtLastMod = f.DateLastModified

    ' Here you compute the number of days between the file last mod date, and the current date
    intDays = DateDiff("d", dtLastMod, Now)

    Set fs = Nothing: Set f = Nothing
    Range("E5").Value = dtLastMod

    If intDays > 5 Then

        If MsgBox("File is " & intDays & " days old, proceed with macro ?", vbYesNo, "Continue?") = vbYes Then
            ' RUN MACRO GOES HERE
        End If
    Else
        MsgBox "File is " & intDays & " days old, cancelling"
    End If

End Sub
0 голосов
/ 02 июля 2018

Поздравляем за правильное использование свойства .DateLastModified!

Вместо MsgBox-es вызовите функцию. DateAdd() возвращает дату, то есть за 5 дней до текущей даты, поэтому ее легко сравнить. Это показывает MsgBox(), который сообщает, имеет ли файл более или менее 5 дней с момента последней модификации:

Option Explicit

Sub LastModifiedFile()

    Dim fileObject As Object
    Dim file As Object
    Dim modPath As String

    modPath = "\\jdshare\pdcmaterials\5_Tools\FTP\Cancelled_Report.txt"
    Set fileObject = CreateObject("Scripting.FileSystemObject")
    Set file = fileObject.GetFile(modPath)

    If DateAdd("d", -5, Now) < file.DateLastModified Then
        MsgBox "Less than 5 days."
    Else
        MsgBox "More than 5 days."
    End If

End Sub

Если вы хотите поместить MsgBox во всю историю с Да и Нет , то это должно быть в порядке:

Sub LastModifiedFile()

    Dim fileObject As Object
    Dim file As Object
    Dim modPath As String

    modPath = "\\jdshare\pdcmaterials\5_Tools\FTP\Cancelled_Report.txt"
    Set fileObject = CreateObject("Scripting.FileSystemObject")
    Set file = fileObject.GetFile(modPath)

    Dim msgBoxStatement As String

    If DateAdd("d", -5, Now) < file.DateLastModified Then
        msgBoxStatement = "This file is NOT older than 5 days!" & vbCrLf & _
            "Should it be deleted?"
    Else
        msgBoxStatement = "This file is older than 5 days!" & vbCrLf & _
            "Should it be deleted?"
    End If        

    Select Case MsgBox(msgBoxStatement, vbYesNo Or vbQuestion, "Delete?")        
        Case vbYes
            'run the for deletion
        Case vbNo
            'do not run the code for deletion
    End Select

End Sub
...