我正在尝试扫描特定文件夹并打开最近标题为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
答案 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
。