MS Access:尝试删除电子表格时数据库崩溃
Posted
技术标签:
【中文标题】MS Access:尝试删除电子表格时数据库崩溃【英文标题】:MS Access: DB is crashing when trying to delete a spreadsheet 【发布时间】:2017-04-14 14:20:37 【问题描述】:我有一个导出文件的按钮,但首先它会检查该文件是否存在。如果是,则删除该文件并在其位置写入一个新文件。问题是单击此按钮会立即使数据库崩溃。任何想法为什么?这个问题最近才出现——它之前在 Acess 2013 和 Access 2016 上都运行良好。环境是一个商业环境(公司笔记本电脑,而不是个人笔记本电脑),我们所做的大部分事情都由 IT 管理。管理员。
代码:
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
【问题讨论】:
【参考方案1】:可能在按钮单击事件中调用的机器上没有这样的目录。您使用驱动器号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:\
驱动器)。
【讨论】:
以上是关于MS Access:尝试删除电子表格时数据库崩溃的主要内容,如果未能解决你的问题,请参考以下文章
VBA Excel - 从 MS Access 将列名保存到电子表格