2

我正在尝试扫描特定文件夹并打开最近命名的 Excel 文件。这些文件被命名为“10 1 13”和“10 2 13”等。我的 sub 正确识别了最新的文件。但是,当它尝试打开它时,我收到以下错误:

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

该文件通常会被某人使用,但每天只修改一次。我需要做的就是打开一个只读工作簿并从中复制数据。不需要修改或保存,这就是我尝试“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 回答