2013-10-20 25 views
0

我遇到的问题是文档有时会导入很好,而在其他时间则不会。从它看起来,Excel并不总是关闭。任何人都可以提出一种方法来确保打开的Excel实例已关闭?或者指出我对此有很好的参考?我在MS Access中使用这个VBA。下面是我的代码:VBA Excel只是不会退出

Public Function ImportPayment() 
Dim fd As FileDialog 
Dim wb As Workbook 
Dim ws As String 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 
    With fd 
    .AllowMultiSelect = False 
    .Title = "Please select a file." 
    .Show 
    On Error GoTo ErrorHandler: 
     ws = fd.SelectedItems(1) 
     Workbooks.Open (ws) 
     Rows("1:9").Select 
     Selection.Delete Shift:=xlUp 
     Cells(Rows.count, "L").End(xlUp).EntireRow.Delete 
     Excel.Application.DisplayAlerts = False 
     ActiveWorkbook.SaveAs FileName:= _ 
     "\\servername\serverfolder\serversubfolder\subfolder\sub\file.txt", 
     FileFormat:=xlText _ , CreateBackup:=False 
     End With 

    ActiveWorkbook.Close 
    Excel.Application.DisplayAlerts = True 
    Excel.Application.Quit 

DoCmd.TransferText acImport, "Specification", "table", 
"\\server\serverfolder\serversubfolder\subfolder\sub\file.txt", False 
MsgBox ("Your data was imported successfully.") 
ImportPayment = Yep 
Exit Function 

ErrorHandler: 
    ImportPayment = Nope 
    MsgBox ("The upload was canceled.") 

End Function 
+0

因为我知道该文件总是会成为一个Excel文件,所以在文件选取器之前创建一个Excel对象是否理想?我只是想通过这里思考一些想法。我一直在使用VBA大约4个月,所以我在这方面还很缺乏经验。 – mbnew

+0

是的,它是:通过实例化一个Excel应用程序对象并在此应用程序对象中添加工作簿对象来保持对Excel对象的控制。 – Trace

回答

1

试试这个方法:

Sub create_excel_instance() 

Dim oExcel As Excel.Application 
Dim oBook As Excel.Workbook 
Set oExcel = CreateObject("excel.application") 

oExcel.Visible = True 
set oBook = oExcel.Workbooks.Add 

'Close 
oBook.close 
set oBook = nothing 
oExcel.Quit 

End Sub 

注:而不是使用ActiveWorkbook,你会发现,这段代码设置到每个对象的引用。这是很好的做法;它会为您节省很多错误并且保留您创建的对象的良好概览。

+0

感谢您的建议金!我试着添加这个,但是我得到一个错误,MS Access数据库引擎无法访问该文件,因为它当前正在使用。我在本地使用该文件,所以我不确定这是从哪里来的。有什么想法吗? – mbnew

+0

您是否在使用我发布的代码?如果是这样,你会在哪一行得到错误? – Trace

+0

嘿金,你的代码奇妙地工作。不幸的是,我遇到了VPN方面的问题,并在第二天进行了操作,并且工作完美无瑕。谢谢您的帮助! – mbnew