0

指定されたディレクトリで最新の日付を持つファイルを見つける必要があります。私はVB6の初心者ではありません。それは、古いコードに使用する必要があるものです。以下の一日中グーグルを殺した後、私はこれまでに持っているものです。しかし、適切なファイルが見つかりません。誰か助けてもらえますか?ありがとう

Dim sFile1  As String
Dim sFile2 As String
Dim dFile1Date As Date
Dim dFile2Date As Date

sFile1 = Dir("c:\test\*.*", vbNormal)

Do
    sFile2 = Dir
    If sFile1 <> "" Then dFile1Date = FileDateTime("c:\test\" & sFile1)
    If sFile2 <> "" Then dFile2Date = FileDateTime("c:\test\" & sFile2)

    If dFile1Date > dFile2Date Then sFile2 = sFile1

Loop Until sFile2 = ""

FormVersionDate = sFile1
Call MsgBox(FormVersionDate, vbExclamation, App.Title)
4

2 に答える 2

3

sFile1コードをステップ実行すると、ロジックの結果に関係なく が再割り当てされないことがわかります。そのため、最後にその値を呼び出すと、すべての do ループが無関係になります。FormVersionDateまた、おそらく日付のように見えますが、代わりに文字列を割り当てています。

ネストされたループを使用してコードを書き直して、過度のコメントと無関係である場合にロジックを回避しました。

Dim sFile1  As String
Dim sFile2 As String
Dim dFile1Date As Date
Dim dFile2Date As Date

'Get first File
sFile1 = Dir("c:\test\*.*", vbNormal)
'Make sure file exists
If sFile1 <> "" Then
    'Since file exists retrieve DateTime for file
    dFile1Date = FileDateTime("c:\test\" & sFile1)
    'begin loop for other files
    Do
        'Retrieve new file
        sFile2 = Dir
        'Make sure file exists
        If sFile2 <> "" Then
            'Retrieve DateTime for file
            dFile2Date = FileDateTime("c:\test\" & sFile2)
            'If old DateTime is older than new DateTime
            If dFile1Date < dFile2Date Then
                'Overwrite first file variables with newer file info
                sFile1 = sFile2
                dFile1Date = dFile2Date
            End If
        End If
        'Loop until new file doesn't exist
    Loop Until sFile2 = ""
End If
'If you actually want the date, you should use dFile1Date instead of sFile1.
FormVersionDate = sFile1
Call MsgBox(FormVersionDate, vbExclamation, App.Title)
于 2012-11-10T00:25:37.903 に答える
2

変数名を介して通信しようとすることについては、多くのことが言えます。多くの場合、特に短い手順では、多くの補正コメントを追加するよりもはるかに明確な結果が得られます。

Dim Directory As String
Dim CurrFile As String
Dim CurrDate As Date
Dim NewestDate As Date
Dim NewestFile As String

Directory = "c:\test\"
CurrFile = Dir$(Directory & "*.*", vbNormal)
Do While Len(CurrFile) > 0
    CurrDate = FileDateTime(Directory & CurrFile)
    If CurrDate > NewestDate Then
        NewestDate = CurrDate
        NewestFile = CurrFile
    End If
    CurrFile = Dir$()
Loop
MsgBox CStr(NewestDate) & vbNewLine & NewestFile

ただし、これは、目に見えるファイルがないディレクトリを検出して警告しないことに注意してください。ただし、空の ("") を探すこともできNewestFileます。

于 2012-11-10T19:32:19.397 に答える