2017-04-14 93 views
1

我有一个导出文件的按钮,但首先会检查该文件是否存在。如果确实如此,则删除该文件并在其位置上写入新文件。问题是单击此按钮会立即崩溃数据库。任何想法为什么?这个问题最近才出现 - 在Acess 2013和Access 2016之前工作正常。环境是一种商业环境(公司笔记本电脑,而不是私人环境),我们所做的大部分工作都由I.T管理。管理员。MS Access:尝试删除电子表格时数据库崩溃

代码:

Private Sub Command370_Click() 

    Dim myQueryName As String 
    Dim myExportFileName As String 

    myQueryName = "qry_SAP_FGCheck" 
    myExportFileName = "J:\2017\SAP\SAPExports\DailyFGCheck_Export.xlsx" 
    If Len(myExportFileName) > 0 Then 
     On Error GoTo Err_Msg 
     Kill myExportFileName 
    End If 
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, myQueryName, myExportFileName 
    Application.FollowHyperlink myExportFileName 

Err_Msg: If (Err.Number = 70) Then MsgBox "Error: (" & Err.Number & ")" & Err.description & ". You must close the spreadsheet in order to export.", vbOKOnly Else Resume Next 


End Sub 

回答

2

可能有一个名为按钮点击事件的机器上没有这样的目录。您使用驱动器号J:\建议用户定义的映射驱动器路径到网络目录。用户可能已映射到不同的驱动器号。尝试完整的UNC可在CMD线net use发现:

myExportFileName = "\\SomeNetwork\Path\2017\SAP\SAPExports\DailyFGCheck_Export.xlsx" 

事实上,现在的文件始终删除,因为你正在检查VBA字符串的长度(始终为零)为您分配它只是之前而不是实际的文件系统对象。

If Len(Dir(myExportFileName, vbDirectory)) > 0 Then 
    On Error GoTo Err_Msg 
    Kill myExportFileName 

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ 
           myQueryName, myExportFileName 
    Application.FollowHyperlink myExportFileName 
End If 

即使考虑保存到数据库的当前路径,也无所谓什么目录是提供给用户,甚至可以避免覆盖:

如果这样的目录文件路径删除或导出之前存在考虑调理其他用户的出口。

myExportFileName = Application.CurrentProject.Path & "\DailyFGCheck_Export.xlsx" 

If Len(Dir(myExportFileName, vbDirectory)) > 0 Then 
    On Error GoTo Err_Msg 
    Kill myExportFileName 

    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _ 
           myQueryName, myExportFileName 
    Application.FollowHyperlink myExportFileName 
End If 

,理想的每个用户使用的是当地的CPU(即,C:\驱动器),他/她自己的前端。