使用VBA打开.xlsx,文件正在使用错误。只读无效

时间:2013-10-01 16:19:48

标签: vba excel-vba excel

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

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

该文件通常由某人使用,但每天只修改一次。我需要做的就是打开一个只读工作簿并从中复制数据。不需要修改或保存,这就是为什么我尝试了“ReadOnly:= True'争论,但我仍然收到错误信息。

文件路径' \ Hsrkdfs \ hsdata \ rk \ grp06 ....'是因为我从一个网络中拉出来,每个人的网络访问都没有被映射到同一个网络。有些人从G:驱动器访问此文件夹,其他人从R:,并且此宏必须在所有计算机上运行。 Debug将我指向' Workbooks.Open文件名:= 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

1 个答案:

答案 0 :(得分: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