Ms access 删除当前Excel文件的代码,然后在不打开输出文件的情况下导出到新的Excel文件

Ms access 删除当前Excel文件的代码,然后在不打开输出文件的情况下导出到新的Excel文件,ms-access,ms-access-2007,vba,Ms Access,Ms Access 2007,Vba,我有一个数据库,它与其他一些数据库相链接。有问题的数据库有一些脚本,可以将表导出到Excel“.xlsx”,其名称链接到其他数据库。基本上,数据输入是在一个数据库中完成的,然后另一个数据库实时获取信息,因此我们可以进行实时更新 但是,在kill序列完成并导出新文件后,Excel文件将打开。这会导致第二个db无法看到实时更新,因为新导出文件实际上不会覆盖上一个,因为上一个已自动打开。我需要帮助告诉Excel导出文件不要打开 我知道我应该调暗文件名,但我没有:-) 下面是代码,非常感谢您的帮助 Pr

我有一个数据库,它与其他一些数据库相链接。有问题的数据库有一些脚本,可以将表导出到Excel“.xlsx”,其名称链接到其他数据库。基本上,数据输入是在一个数据库中完成的,然后另一个数据库实时获取信息,因此我们可以进行实时更新

但是,在kill序列完成并导出新文件后,Excel文件将打开。这会导致第二个db无法看到实时更新,因为新导出文件实际上不会覆盖上一个,因为上一个已自动打开。我需要帮助告诉Excel导出文件不要打开

我知道我应该调暗文件名,但我没有:-)

下面是代码,非常感谢您的帮助

Private Sub Form_Activate()

'Delete Existing File First; then create new
On Error Resume Next
Kill "\\ct13nt003\MFG\SMT_Schedule_Files\SMT Line Progress Files\SMT2Updated.xlsx"
On Error GoTo 0
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "SMT2Export", "\\ct13nt003\MFG\SMT_Schedule_Files\SMT Line Progress Files\SMT2Updated.xlsx", True

由于我在Access中没有真正执行VBA,但我在Excel中执行了很多操作,因此我在这里遇到了困难,请尝试以下方法:

Private Sub Form_Activate()
Const xlFileName as String = "\\ct13nt003\MFG\SMT_Schedule_Files\SMT Line Progress Files\SMT2Updated.xlsx"
Const shortFileName as String = "SMT2Updated.xlsx"
Dim xlApp As Object 'Excel.Application
Dim xlWb as Object 'Excel.Workbook

'Delete Existing File First; then create new
On Error Resume Next
Kill xlFileName
On Error GoTo 0

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "SMT2Export", xlFileName, True

'Get the Excel Application
Set xlApp = GetObject(,"Excel.Application")
'Get the specific workbook
Set xlWb = xlApp.Workbooks(shortFileName)
'Close the workbook
xlWb.Close
'Quit Excel (if needed)
'xlApp.Quit

'Clean up
Set xlWb = Nothing
Set xlApp = Nothing
End Sub
下标超出范围错误

根据上述修订,使用
xlApp.Workbooks
方法使用文件名而不是完整路径


此错误还有另一个可能的原因,但这是最有可能的。

该代码在下一次恢复时出现了
错误。
就在
Kill xlFileName
之前。这意味着如果
Kill
因任何原因失败,它将以静默方式失败

我不知道这个问题是否与你的问题有关,但建议你改用这种方式

”首先删除现有文件;然后创建新的
'出现错误时,请继续下一步
如果Len(Dir(xlFileName))>0,则
杀死xlFileName
其他的
'xlFileName不存在;不需要杀戮
如果结束
'在出现错误时转到0

通读您的场景,我很困惑,因为我从来没有“杀死”一个文件时遇到过这样的问题。也许像其他用户建议的那样,您应该关闭“On Error Resume Next”,至少在您弄清楚发生此错误的原因之前

另一个建议是尝试不同的删除方法,如

myFSO.DeleteFile "\\ct13nt003\MFG\SMT_Schedule_Files\SMT Line Progress Files\SMT2Updated.xlsx"

我在那里有一行“On Error Resume Next(错误恢复下一步)”,以跳过该步骤,以防文件不存在(有时可能会出现这种情况)。听起来问题不在于
kill
,而在于
DoCmd.TransferSpreadsheet
方法打开了文件。没有操作/参数阻止文件打开,因此我认为根据我上面的建议,有必要立即强制关闭文件。@DavidZemens这正是我所想的。非常感谢你的帮助。@ USER 88700如果我的回答对你有帮助,请考虑把它作为“被接受的答案”:谢谢戴维的反馈。我一直在“Set xlWb=xlApp.Workbooks(xlFileName)”一行@user2887400上抛出一个运行时错误9请参见上面的修订。让我知道这是否对你有用。下面的任何答案解决了你的问题吗?如果是,请将其中一个标记为已接受。。。