2

特定のフォルダーをスキャンして、最新のタイトルの Excel ファイルを開こうとしています。ファイルの名前は「10 1 13」および「10 2 13」などです。私のサブは最新のファイルを正しく識別します。ただし、それを開こうとすると、次のエラーが表示されます。

'Filename' is currently in use. Try again later.

通常、ファイルは誰かによって使用されますが、変更されるのは 1 日に 1 回だけです。読み取り専用のワークブックを開いて、そこからデータをコピーするだけです。変更や保存は必要ありません。そのため、'ReadOnly:= True' 引数を試しましたが、それでもエラー メッセージが表示されます。

ファイル パス '\Hsrkdfs\hsdata\rk\grp06....' は、全員のネットワーク アクセスが同じようにマッピングされていないネットワークからプルしているためです。G: ドライブからこのフォルダにアクセスする人もいれば、R: ドライブからアクセスする人もいます。このマクロは、すべてのコンピュータから機能する必要があります。デバッグは、「Workbooks.Open Filename:=strFilename, ReadOnly:=True」行を示しています。

ワークブックを開くためのより確実な方法はありますか? 使用に関係なく強制的に開く別の方法はありますか? または、競合を完全に回避する方法はありますか? ありがとうございました。

Sub GetMostRecentFile()

    Dim FileSys As FileSystemObject
    Dim objFile As File
    Dim myFolder
    Dim strFilename As String
    Dim dteFile As Date

    'set path for files - CHANGE FOR YOUR APPROPRIATE FOLDER
    Const myDir As String = "\\Hsrkdfs\hsdata\rk\grp06\Rockford Repair Station Quality\DELIVERY\Daily Status report - commercial"

    'set up filesys objects
    Set FileSys = New FileSystemObject
    Set myFolder = FileSys.GetFolder(myDir)   

    'loop through each file and get date last modified. If largest date then store Filename
    dteFile = DateSerial(1900, 1, 1)
    For Each objFile In myFolder.Files
        If objFile.DateLastModified > dteFile Then
            dteFile = objFile.DateLastModified
            strFilename = objFile.Path
        End If
    Next objFile
    Workbooks.Open Filename:=strFilename, ReadOnly:=True  

    Set FileSys = Nothing
    Set myFolder = Nothing

End Sub
4

1 に答える 1

0

GetObjectファイルの読み取りのみが必要な場合は、使用してみてください。このようなもの:

Dim wb As Workbook

Set wb = GetObject(strFilename)

'Change this line to reflect the ranges you need to copy/paste.
wb.Sheets("Sheet1").Range("A1").Copy ThisWorkbook.Sheets("Sheet1").Range("A1")

wb.Close

これ使用すると、別のユーザー (あなたを含む) が開いているかどうかに関係なく、ブックからコピーできます。

ワークブックが保護されている場合、またはコピーしようとしているシートが保護されている場合、このアプローチは機能しないことに気付きました。

また、ThisWorkbookコードが貼り付けたいシートと同じワークブックにある場合にのみ、上記のように使用してください。

于 2013-10-01T20:47:42.043 に答える