Excel 文件未使用 .Close 方法关闭
Excel file doesn't close using .Close method
我创建了一个使用源 excel 文件的 UDF,提取数据作为 UDF 结果。
但是,即使我在 'with' - 下面的代码中使用 .close 方法,源文件也不会关闭。
任何有关在使用后关闭源文件的帮助将不胜感激,非常感谢!
sfilename = "R:\values only.xlsb"
Application.DisplayAlerts = False
With GetObject(sfilename)
range1 = .Sheets("RawData").Range("A:B")
If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
MsgBox "Pair or date does not exist!"
Else
getex = 1 / Application.VLookup(lookupval2, range1, 2, False)
End If
Else
getex = Application.VLookup(lookupval, range1, 2, False)
End If
.Close
End With
Application.DisplayAlerts = True
如上面的评论所述,您可以在另一个实例中打开您的文件(在同一实例中,您的 UDF 公式调用将不起作用)
Set objExcel = CreateObject("Excel.Application")
With objExcel
.Visible = False
.DisplayAlerts = False
With .Workbooks.Open(sfilename)
range1 = .Sheets(2).Range("A:B")
If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
MsgBox "Pair or date does not exist!" 'do not use msgbox but give getex a string => getex = "error"
Else
getex = 1 / Application.VLookup(lookupval2, range1, 2, False)
End If
Else
getex = Application.VLookup(lookupval, range1, 2, False)
End If
.Close
End With
.Quit
End With
另一种可能性是将 Sub 的 UDF 结果放在 sheet 中(我会这样做)
我创建了一个使用源 excel 文件的 UDF,提取数据作为 UDF 结果。
但是,即使我在 'with' - 下面的代码中使用 .close 方法,源文件也不会关闭。
任何有关在使用后关闭源文件的帮助将不胜感激,非常感谢!
sfilename = "R:\values only.xlsb"
Application.DisplayAlerts = False
With GetObject(sfilename)
range1 = .Sheets("RawData").Range("A:B")
If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
MsgBox "Pair or date does not exist!"
Else
getex = 1 / Application.VLookup(lookupval2, range1, 2, False)
End If
Else
getex = Application.VLookup(lookupval, range1, 2, False)
End If
.Close
End With
Application.DisplayAlerts = True
如上面的评论所述,您可以在另一个实例中打开您的文件(在同一实例中,您的 UDF 公式调用将不起作用)
Set objExcel = CreateObject("Excel.Application")
With objExcel
.Visible = False
.DisplayAlerts = False
With .Workbooks.Open(sfilename)
range1 = .Sheets(2).Range("A:B")
If IsError(Application.VLookup(lookupval, range1, 2, False)) Then
If IsError(Application.VLookup(lookupval2, range1, 2, False)) Then
MsgBox "Pair or date does not exist!" 'do not use msgbox but give getex a string => getex = "error"
Else
getex = 1 / Application.VLookup(lookupval2, range1, 2, False)
End If
Else
getex = Application.VLookup(lookupval, range1, 2, False)
End If
.Close
End With
.Quit
End With
另一种可能性是将 Sub 的 UDF 结果放在 sheet 中(我会这样做)