怎样判断一个Excel文件是否在被其它的人使用?
你好, 我在用Access的代码里自动导入Excel文件时, 提示有人已经以独占方式打开了.不让我导入数据,请问有没有方判断一个excel文件是否被另一个用户在使用。 --------------------编程问答-------------------- 你以独占模式打开不就 知道了么? --------------------编程问答-------------------- 我怎么用程序来判断呢?我只会VBA,用getobject打开那个文件,总是会把文件打开,得不到一个值来确定其是否正在被另一用户使用.请问有没有懂VBA的高手指点一下. --------------------编程问答--------------------
Private Function ExcelOpened(Optional strFileName As String) As Boolean
Dim MyXL As Object, strMessage As String
On Error Resume Next
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Err.Clear
ExcelOpened = False
Else
If MyXL.Workbooks(1).FullName = "" Then
strMessage = "程序检测到你已经打开了一个Excel窗口,但没有打开任何文件!" & vbCrLf & vbCrLf
strMessage = strMessage & "是否将它关闭?"
If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
MyXL.Quit
ExcelOpened = False
Else
MsgBox "因为已有一个Excel窗口打开,程序无法继续工作!", vbExclamation, "出错信息"
ExcelOpened = True
End If
ElseIf MyXL.Workbooks(1).FullName = strFileName And strFileName <> "" Then
strMessage = "需要导出数据的工作薄已被Excel打开,是否需要保存并退出?"
If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
MyXL.Workbooks(1).Save
MyXL.Workbooks(1).Close
MyXL.Quit
ExcelOpened = False
Else
strMessage = "程序无法继续执行操作,请先关闭你正在操作的工作薄!"
MsgBox strMessage, vbExclamation, "出错信息"
ExcelOpened = True
End If
Else
strMessage = "程序检测到你已经打开了一个Excel窗口,并且已经打开了一个(或多个)文档!" & vbCrLf & vbCrLf
strMessage = strMessage & "你需要将它关闭才能继续工作!是否现在将它关闭?"
If MsgBox(strMessage, vbYesNo + vbInformation, "询问") = vbYes Then
MyXL.Workbooks(1).Save
MyXL.Workbooks(1).Close
MyXL.Quit
ExcelOpened = False
Else
MsgBox "因为已有一个Excel窗口打开并且存在一个文档,程序无法继续工作!", vbExclamation, "出错信息"
ExcelOpened = True
End If
End If
End If
Set MyXL = Nothing
End Function
参考一下~ --------------------编程问答-------------------- 谢谢!你的代码可以,但是不是回答我提的那个问题,我想检查的是一个excel是否被其他用户使用。比如,在局域网里, 有可能其他用户正在使用此文件,那么我去读数据的时候就不准确!我用过Getobject,他总是会把我的目标文件打开,影响我导入此文件到Access当中。
不过还是很谢谢你的代码,对我写其他的东东很有帮助。:)
--------------------编程问答-------------------- on error goto err1
open "...xls" for output as #1
close #1
exit sub
err1:
debug.print "被其他用户使用" --------------------编程问答-------------------- 我在Microsoft的网站找到了一个现成的函数,很有用。 isfileopen
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 "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
--------------------编程问答-------------------- 马克
补充:VB , 基础类