如果两个应用程序同时使用相同的工作簿,则工具in无法关闭这些工作簿(vba)
我的如果两个应用程序同时使用相同的工作簿,则工具in无法关闭这些工作簿(vba),vba,excel,Vba,Excel,我的VBA应用程序从.csv文件(作为原始文件)更新一些.xls文件(作为数据库文件)。 要更新这些.xls文件,应用程序将在查找文件(.xls文件)中查找一些信息,并在数据库中进行更新。如果我从不同的文件夹运行相同的应用程序来更新不同的数据库文件,但使用相同的查找文件,则应用程序工作正常,但最终无法关闭所有查找文件和原始文件。 应用程序也不会抛出任何异常。 我正在以只读模式打开这些查找文件。如何关闭这些文件而不保存它们? 请就这个问题提出建议 事实上,我是从windows调度器运行该工具的,所
VBA
应用程序从.csv文件(作为原始文件)更新一些.xls
文件(作为数据库文件)。要更新这些.xls文件,应用程序将在查找文件(.xls文件)中查找一些信息,并在数据库中进行更新。如果我从不同的文件夹运行相同的应用程序来更新不同的数据库文件,但使用相同的查找文件,则应用程序工作正常,但最终无法关闭所有查找文件和原始文件。 应用程序也不会抛出任何异常。 我正在以只读模式打开这些查找文件。如何关闭这些文件而不保存它们? 请就这个问题提出建议 事实上,我是从windows调度器运行该工具的,所以当进程完成时,它会自动关闭所有东西。但我观察到的是,该工具没有关闭这些文件: -3查找文件,工具从中提取(读取)一些信息以更新数据库文件。 -最后打开的原始文件。 -上次打开的数据库文件 要打开查找文件和原始文件,我使用以下代码 设置Wbk\u machineLookup\u SN=Workbooks.Open(filenameanText,ReadOnly:=True) 要打开数据库文件,请执行以下操作: 设置wbk\u dtc\u Month=Workbooks.Open(文件名和路径) 我正在关闭查找和原始文件而不保存它们,代码为:
Public Sub CloseAllFiles()
Dim StrName As String
Application.ScreenUpdating = False
On Error Resume Next
StrName = ToCheckExtention(Form_TopLevel.TextBox_SubSystem_LookUp, 1)
If Module2.IsXLBookOpen(StrName) = True Then
Application.DisplayAlerts = False
Wbk_SubSystem.Close Savechanges:=False
Application.DisplayAlerts = False
Set Wbk_SubSystem = Nothing
End If
StrName = ToCheckExtention(Form_TopLevel.TextBox_MachineSN_LookUp, 1)
If Module2.IsXLBookOpen(StrName) = True Then
Wbk_MachinLookUp_SN.Close Savechanges:=False
Set Wbk_MachinLookUp_SN = Nothing
End If
StrName = ToCheckExtention(Form_TopLevel.TextBox_SwPn_Rel_LookUp, 1)
If Module2.IsXLBookOpen(StrName) = True Then
Application.DisplayAlerts = False
Wbk_SW_ReleseasesLookup.Close Savechanges:=False
Application.DisplayAlerts = False
Set Wbk_SW_ReleseasesLookup = Nothing
End If
StrName = ToCheckExtention(Form_TopLevel.TextBox_SwPn_ESI_BR, 1)
If Module2.IsXLBookOpen(StrName) = True Then
Application.DisplayAlerts = False
Module2.Wbk_sw_pn.Close Savechanges:=False
Application.DisplayAlerts = False
Set Wbk_sw_pn = Nothing
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.Calculation = xlCalculationAutomatic
End Sub
Function ToCheckExtention(Str As String, Flag As Byte) As String
Dim IndexNo As Integer
Dim temp As String
Application.ScreenUpdating = False
IndexNo = InStr(Str, "\")
If IndexNo <> 0 Then
temp = StrReverse(Str)
IndexNo = InStr(temp, "\")
Str = VBA.MID(temp, 1, IndexNo - 1)
Str = StrReverse(Str)
End If
IndexNo = InStr(Str, ".")
If IndexNo <> 0 Then
temp = VBA.MID(Str, IndexNo + 1, Len(Str))
If temp = "xls" Or temp = "csv" Then
ToCheckExtention = Str
Exit Function
End If
ElseIf IndexNo = 0 Then
If Flag = 1 Then
Str = Str & ".xls"
ToCheckExtention = Str
Exit Function
ElseIf Flag = 0 Then
Str = Str & ".csv"
ToCheckExtention = Str
Exit Function
End If
End If
ToCheckExtention = Str
Application.ScreenUpdating = False
End Function
Function IsXLBookOpen(StrName As String) As Boolean
Dim i As Long, XLAppFx As Excel.Application, NotOpen As Boolean
Dim IndexNo As Integer
Dim temp As String
Application.ScreenUpdating = False
'Find/create an Excel instance
IndexNo = InStr(StrName, "\")
If IndexNo <> 0 Then
temp = StrReverse(StrName)
IndexNo = InStr(temp, "\")
StrName = VBA.MID(temp, 1, IndexNo - 1)
StrName = StrReverse(StrName)
End If
On Error Resume Next
Set XLAppFx = GetObject(, "Excel.Application")
If Err.Number = 429 Then
NotOpen = True
Set XLAppFx = CreateObject("Excel.Application")
Err.Clear
End If
'Loop through all open workbooks in such instance
For i = XLAppFx.Workbooks.Count To 1 Step -1
If XLAppFx.Workbooks(i).Name = StrName Then Exit For
Next i
'Set all to False
IsXLBookOpen = False
'Perform check to see if name was found
If i <> 0 Then IsXLBookOpen = True
'Close if was closed
If NotOpen Then XLAppFx.Quit
'Release the instance
Set XLAppFx = Nothing
Application.ScreenUpdating = False
End Function
我已经解决了不关闭所有文件的问题。 我已对函数“函数IsXLBookOpen”进行了修改 变化是:
Function IsXLBookOpen(StrName As String) As Boolean
Dim oBk As Workbook
On Error Resume Next
Set oBk = Workbooks(StrName)
On Error GoTo 0
If oBk Is Nothing Then
IsXLBookOpen = False
Else
IsXLBookOpen = True
End If
End Function
如果我以只读模式打开文件,则先前的函数没有返回正确的值。我们需要查看一些编解码器。您能提供更多详细信息吗?你怎么知道他们没有关门?尝试关闭但显然不关闭excel文件的代码是什么?它们是怎么开的?等我们需要了解您的问题才能提供帮助。我已经编辑了我的帖子供您参考。原始文件,您是否正在将它们打开到Excel对象中?我接受了吗?如果是这样,在打开文件之前,不要试图解析所有打开的Excel实例,而是为它们指定一个对象变量。这将删除一个可能的断开连接。未关闭的工作簿只是查找文件。我正在为不同的查找文件创建不同的对象。我还使用excel对象打开和关闭查找文件。
Function IsXLBookOpen(StrName As String) As Boolean
Dim oBk As Workbook
On Error Resume Next
Set oBk = Workbooks(StrName)
On Error GoTo 0
If oBk Is Nothing Then
IsXLBookOpen = False
Else
IsXLBookOpen = True
End If
End Function