我正在使用一些代码打开另一个文件来获取数据。
这使用了我在某处调用IsWorkBookOpen
的函数来检查文件是否已经打开。
下面的代码效果很好,但我试图让它在只读模式下工作。
我想要做的只是在只读模式下打开文件。
所以更新
Workbooks.Open FileName:="R:\Development\Copy of Product Information.xlsm", ReadOnly:=True, Password:="bcd"
我尝试更新此代码以只读方式打开文件,但宏不识别该文件已打开(处于只读模式)并尝试再次打开它。
Ret = IsWorkBookOpen("R:\Development\Copy of Product Information.xlsm")
If Ret = True Then
Workbooks("Copy of Product Information.xlsm").Activate
Sheets("Main").Select
Else
Workbooks.Open FileName:="R:\Development\Copy of Product Information.xlsm", Password:="bcd"
Sheets("Main").Select
End If
IsWorkBookOpen
功能代码:
Function IsWorkBookOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 0: IsWorkBookOpen = False
Case 70: IsWorkBookOpen = True
Case Else: Error ErrNo
End Select
End Function
我想知道一种修改IsWorkBookOpen
以处理只读模式的方法。
答案 0 :(得分:2)
尝试以下操作,它将告诉您文件是否在文件系统级别标记为只读,这与应用程序以只读方式打开的文件不同。
'Add a reference to Microsoft Scripting Runtime
Function FileIsReadOnly(filePath As String) As Boolean
Dim fso As Scripting.FileSystemObject
Set fso = New Scripting.FileSystemObject
Dim fil As Scripting.File
Set fil = fso.GetFile(filePath)
FileIsReadOnly = fil.Attributes And ReadOnly
End Function
答案 1 :(得分:1)
如果以只读方式打开工作簿,我猜你的函数总是返回false,除非某个其他进程或用户打开了该文件。如果您只需要检查当前Excel会话中的工作簿是否已打开,则可以使用以下内容:
Function IsWorkbookOpen(sWbName As String) As Boolean
Dim oWb As Workbook
On Error Resume Next
Set oWb = Workbooks(sWbName)
IsWorkbookOpen = (Err.Number = 0)
End Function
答案 2 :(得分:0)
这样的东西可以工作(不需要额外的引用),并会告诉您应用程序是否打开工作簿,以及工作簿是否只读。默认情况下,如果工作簿处于打开状态,该函数将仅返回true,并且是只读的。
x = fread('gunzip -cq test/allRequests.csv.gz')