Microsoft KB Archive/291295

= Macro code to check whether a file is already open =

Article ID: 291295

Article Last Modified on 1/31/2007

-

APPLIES TO


 * Microsoft Office Excel 2007
 * Microsoft Office Excel 2003
 * Microsoft Excel 2002 Standard Edition

-



This article was previously published under Q291295





For a Microsoft Excel 2000 version of this article, see 213383.



For a Microsoft Excel 98 and earlier versions of Excel version of this article, see 138621.



SUMMARY
When you use a file that is shared over a network, you may frequently find it useful to know if another user has the file open. The following Microsoft Visual Basic for Applications procedure is an example of a method for determining whether another user has a particular file open.



MORE INFORMATION
Microsoft provides programming examples for illustration only, without warranty either expressed or implied. This includes, but is not limited to, the implied warranties of merchantability or fitness for a particular purpose. This article assumes that you are familiar with the programming language that is being demonstrated and with the tools that are used to create and to debug procedures. Microsoft support engineers can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific requirements.

Sample macro code
If a given file is not already open, the following macro also opens it. If the file is not in the location that you specified, you receive the following error message:

File not found.

To create a Visual Basic procedure to see if Book2.xls or Book2.xlss in drive C is already open, follow these steps.

Note In Microsoft Office Excel 2007, you have to change Book2.xls to Book2.xlss in the following code.  Start Excel, and then press ALT+F11 to open Visual Basic for Applications. In Visual Basic, click Module on the Insert menu.  Type the following code in the module sheet. Sub TestFileOpened

' Test to see if the file is open. If IsFileOpen(&quot;c:\Book2.xls&quot;) Then ' Display a message stating the file in use. MsgBox &quot;File already in use!&quot; '       ' Add code here to handle case where file is open by another ' user. '   Else ' Display a message stating the file is not in use. MsgBox &quot;File not in use!&quot; ' Open the file in Microsoft Excel. Workbooks.Open &quot;c:\Book2.xls&quot; '       ' Add code here to handle case where file is NOT open by another ' user. '   End If

End Sub

' This function checks to see if a file is open or not. If the file is ' already open, it returns True. If the file is not open, it returns ' False. Otherwise, a run-time error occurs because there is ' some other problem accessing the file.

Function IsFileOpen(filename As String) Dim filenum As Integer, errnum As Integer

On Error Resume Next  ' Turn error checking off. filenum = FreeFile  ' Get a free file number. ' Attempt to open the file and lock it. Open filename For Input Lock Read As #filenum Close filenum         ' Close the file. errnum = Err          ' Save the error number that occurred. On Error GoTo 0       ' Turn error checking back on.

' Check to see which error occurred. Select Case errnum

' No error occurred. ' File is NOT already open by another user. Case 0 IsFileOpen = False

' Error number for &quot;Permission Denied.&quot; ' File is already opened by another user. Case 70 IsFileOpen = True

' Another error occurred. Case Else Error errnum End Select

End Function 

