分享

vbs检测xls文件是否已被打开

 禁忌石 2022-02-11

经常,写的程序需要保存/打开/编辑某个xls文件,而xls文件被任何程序打开时,其他程序将无法对他进行编辑、删除操作。
这是需要检测xls文件是否被打开,然后提醒程序来进行后续处理。
这里只是vbs程序的一个例子。

'参数sFile, xls文件绝对路径,如 F:\Excel.xls
Public Function IsFileOpen(sFile)
Dim isOpen
isOpen=false
On Error Resume Next  '遇到错误继续执行下一行
 Dim xlsapp            
 Dim i
 Set xlsapp=GetObject(,"Excel.Application") '获取当前运行的Excel应用程序对象,获取失败则xlsapp为空
 If Isempty(xlsapp) Then    '判断xlsapp是否为空
    'msgbox "Excel没打开"
    isOpen=False
 Else  
    For i = 1 To xlsapp.Workbooks.count      '遍历当前Excel工作簿集合
        If Lcase(xlsapp.Workbooks(i).Path & "\" & xlsapp.Workbooks(i).Name) = Lcase(sFile) Then       '比较工作薄文件名和路径,为防止大小写差异统一转换为小写进行比较   
           'Msgbox sFile&" 已打开"       'F:\Excel.xls
           isOpen=True
           Exit For
        End If
    Next    
 End If
 Set xlsapp=Nothing   '释放对象
 IsFileOpen=isOpen
End Function


**********************************************************************************
On Error Resume Next '遇到错误继续执行下一行
Dim xlsapp
Dim i
Set xlsapp=GetObject(,"Excel.Application") '获取当前运行的Excel应用程序对象,获取失败则xlsapp为空
If Isempty(xlsapp) Then '判断xlsapp是否为空
	msgbox "Excel没打开"
Else
	'For i = 1 To xlsapp.Workbooks.count '遍历当前Excel工作簿集合
	'	If Lcase(xlsapp.Workbooks(i).Path & "\" & xlsapp.Workbooks(i).Name) = Lcase("D:\盘后\副本signal.xlsx") Then '比较工作薄文件名和路径,为防止大小写差异统一转换为小写进行比较
	'		Msgbox "副本signal.xlsx 已打开"
	'		xlsapp.Workbooks(i).close
	'	End If
	'Next
	for each wb in xlsapp
		If Lcase(wb.Name) = Lcase("副本signal.xlsx") then
			Msgbox "副本signal.xlsx 已打开"
			'wb.close
			wb.save
			wb.quit
		end if
	next
End If
Set xlsapp=Nothing '释放对象

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多