请问如何判断一个excel文件是否已经被局域网内其他用户打开?有没有一个什么函数?希望大家帮忙~谢谢~
解决方案 »
- 关于 OpenProcessToken 参数的问题
- 一个奇怪的winsock通讯问题
- 怎样使DataGrid控件得到输入焦点,比如说,我用一个快捷键F2,网格自动取得输入焦点!!急死人啊
- 如何获的程序的句柄?
- 我做的一个关于ADO的程序,到了XP老说类没有注册,可我就不知道是哪个DLL没有注册?
- win2000的关机程序???
- 如何用vb程序注册dll库文件?
- 小小菜鸟刚学VB,新问题又来了,sstab这个控件里如何添加HTML语言并显示内容。
- 求救,用vb写dll,dll中怎么调用其它ocx控件
- vb制作控件时怎样判断控件是运行状态还是设计状态?
- vb只能调用微软的浏览器吗?
- 高分求购!!题库管理系统的源代码!!
另外,即使是以独占方式打开,不是也要先判断是否已经被局域网内其他用户打开吗?
我接触VB不久,还请各位不吝赐教,谢谢~ Dim uExcel As Excel.Application
Dim uExcelBook As Excel.Workbook
Set uExcel = New Excel.Application
Set uExcelBook = uExcel.Workbooks.Open("D:\test.xls")
Set oSheet = uExcelBook.Worksheets(1)
Set uSheet = uExcelBook.Worksheets(2) ...
...
Dim FileHandle As Long
On Error GoTo ErrHandle
IsFileInUse = True
If Not FileExists(FileName) Then
IsFileInUse = True
Exit Function
End If
FileHandle = CreateFile(FileName, _
GENERIC_READ Or _
GENERIC_WRITE, _
0&, _
ByVal 0&, _
OPEN_EXISTING, _
FILE_ATTRIBUTE_ARCHIVE Or _
FILE_ATTRIBUTE_HIDDEN Or _
FILE_ATTRIBUTE_NORMAL Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_SYSTEM, _
0& _
)
If FileHandle = -1 Then Exit Function
IsFileInUse = False
Call CloseHandle(FileHandle)
Exit Function
ErrHandle:
Err.Raise Err.Number, "IsFileInUse", Err.Description
End Functionif FileInUse("d:\test.xls") then
msgbox "文件正在使用..."
end if
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Function FileExists(ByVal FileName As String) As Boolean
Dim FileHandle As Long
On Error GoTo ErrHandle
FileExists = False
FileHandle = CreateFile(FileName, _
0&, _
FILE_SHARE_READ Or _
FILE_SHARE_WRITE, _
ByVal 0&, _
OPEN_EXISTING, _
FILE_ATTRIBUTE_ARCHIVE Or _
FILE_ATTRIBUTE_HIDDEN Or _
FILE_ATTRIBUTE_NORMAL Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_SYSTEM, _
0& _
)
If FileHandle = -1 Then Exit Function
FileExists = True
Call CloseHandle(FileHandle)
Exit Function
ErrHandle:
FileExists = False
End Function
Public Function IsFileInUse(ByVal FileName As String) As Boolean
Dim FileHandle As Long
On Error GoTo ErrHandle
IsFileInUse = True
If Not FileExists(FileName) Then
IsFileInUse = True
Exit Function
End If
FileHandle = CreateFile(FileName, _
GENERIC_READ Or _
GENERIC_WRITE, _
0&, _
ByVal 0&, _
OPEN_EXISTING, _
FILE_ATTRIBUTE_ARCHIVE Or _
FILE_ATTRIBUTE_HIDDEN Or _
FILE_ATTRIBUTE_NORMAL Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_READONLY Or _
FILE_ATTRIBUTE_SYSTEM, _
0& _
)
If FileHandle = -1 Then Exit Function
IsFileInUse = False
Call CloseHandle(FileHandle)
Exit Function
ErrHandle:
Err.Raise Err.Number, "IsFileInUse", Err.Description
End Function
Private Sub Command4_Click()
If IsFileInUse("d:\test.xls") Then
MsgBox "test.xls文件正在使用..."
End If
End Sub
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Sub Command4_Click()
If IsFileInUse("d:\test.xls") Then ’本地或是局域网内共享文件的地址
MsgBox "test.xls文件正在使用..."
End If
Errors = GetLastError()
MsgBox Errors ’1
MsgBox Err.LastDllError ’2
End Sub
二、FileExists里, 两个返回值也都是“0”
Private Declare Function GetLastError Lib "kernel32" () As Long
....
If FileHandle = -1 Then Errors = GetLastError()
MsgBox Errors ’1
MsgBox Err.LastDllError ’2 Exit Function End If
....