2015-02-09 262 views
0

我有一个VBA模块,用于打开Excel工作簿并将数据从Access查询复制到Excel工作簿中的单元格。一切正常,直到我关闭Excel工作簿。当发生这种情况时,我得到错误50290,91和424.这些错误似乎是随机发生的,并且模块崩溃的代码行从不相同。它似乎随机崩溃。在关闭Excel工作簿时在MS Access 2010中获取错误50290,91和424

这里是模块的第一部分,这里的一切都定义:

Dim RecSet As DAO.Recordset 
Dim objXLAppln As Excel.Application 
Dim objWBook As Excel.Workbook 
Dim i As Integer 
Dim j As Integer 
Dim StrPathFile As String, strFile As String, strPath As String 
Dim strBrowseMsg As String, strInitialDirectory As String, strFilter As String 
'show dialogue box 
strBrowseMsg = "Select the EXCEL file:" 
'set directory to load files from 
strInitialDirectory = "C:\Bridge_CIP_Part-A_B\" 
'run strFilter function 
strFilter = ahtAddFilterItem(strFilter, "Excel Files (*.xlsx)", "*.xlsx") 
StrPathFile = ahtCommonFileOpenSave(InitialDir:=strInitialDirectory, _ 
    Filter:=strFilter, OpenFile:=True, _ 
    DialogTitle:=strBrowseMsg, _ 
    Flags:=ahtOFN_HIDEREADONLY) 
If StrPathFile = "" Then 
    MsgBox "No file was selected.", vbOK, "No Selection" 
    Exit Function 
End If 
'Set Excel application object. Critical for macro to run properly. Do not change. 
Set objXLAppln = New Excel.Application 
'Open workbook and worksheet to load data. 
With objXLAppln 
    Set objWBook = .Workbooks.Open(StrPathFile) 
    objXLAppln.Visible = True 
End With 
Set RecSet = CurrentDb.OpenRecordset("Part_A-B Query") 

这里是在最后的代码块,我收的一切:

'Close everything 
RecSet.Close 
objWBook.Close SaveChanges:=False 
objXLAppln.Quit 
Set RecSet = Nothing 
Set objWBook = Nothing 
Set objXLAppln = Nothing 

如何获取代码关闭工作簿而不会崩溃?

回答

0

既然你不显示该行是随机的错误,我采取一般的立场,其中一些问题可能的原因:

参考图书馆 - 有可能是丢失或未知的库引用。在运行Access应用程序的每台计算机上检查Alt + F11/Tools/References。此外,由于您运行的是Early Binding,请确保运行此数据库的所有机器都具有使用正确版本选择的Excel库对象。另外,后期绑定Set objXLAppln = CreateObject('Excel.Application')可以避免跨机器的这种参考兼容性。

不同的Windows操作系统(Windows 7对8 VS 8.1,32位与64位)代替标准的Windows打开文件对话框的,考虑使用这证明是跨OS更稳定Application.FileDialog

Dim fd As Object 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 

With fd 
    .Title = "Select the EXCEL file:" 
    .AllowMultiSelect = False 
    .Filters.Clear 
    .Filters.Add "Excel files (*.xlsx)", "*.xlsx" 
    .FilterIndex = 1 
    .InitialFileName = "C:\Bridge_CIP_Part-A_B\" 
    If .Show = True Then 
     strFilePath = .SelectedItems(1) 
    Else 
     'The user pressed Cancel. 
     MsgBox "No file Selected", vbExclamation 
     Set fd = Nothing 
     Exit Function 
    End If 
End With 

管理流程 您打开一个Excel对象到屏幕objXLAppln.Visible = True,输出Access查询到现有的工作簿,但不保存它SaveChanges:=False然后退出objXLAppln.Quit。这不是一个错误,而是调和这个过程。在你的错误处理,关闭了对象完全一样的:

On Error Goto ErrHandle: 
... 
ErrHandle: 
    'Close everything 
    Msgbox Err.Number & " - " & Err.Description, vbCritical 
    RecSet.Close 
    objWBook.Close SaveChanges:=False 
    objXLAppln.Quit 
    Set RecSet = Nothing 
    Set objWBook = Nothing 
    Set objXLAppln = Nothing 
    Exit Function 

此外,一定要检查Task Manager/Processes,看看旧的EXCEL.EXE实例不是由于以前的错误剩余;只读文件可能仍在内存中。最后,在重大VBA代码更改和错误故障排除之后,decompile and compact您的数据库。

祝你好运!

相关问题