【发布时间】:2017-07-28 17:11:10
【问题描述】:
我已经设置了一个基本宏,用于将表格的内容导出到 Excel。宏工作得很好,但现在我想创建一个检查以查看我保存的文件名是否已经存在,如果是,则删除该文件,这样我就不会让用户处理询问他们是否愿意的提示框喜欢覆盖文件。
我将宏转换为 VBA,以便可以添加所需的 dir(filename) 和 kill(filename) 代码。完成后,我能够在 VBA 编辑器中成功运行代码,但是,当我尝试根据我可以访问的表单的“关闭”事件运行代码时,它只会运行在访问中查看的代码宏结构,就好像我从未在 VBA 编辑器中添加任何额外的代码行一样。完成编辑后,我应该做些什么来从 VBA 转换回 Access?
请参阅下面的代码,了解我要执行的代码:
Function ExportLot()
On Error GoTo ExportLot_Err
Dim filename As String
filename = "\\server1\Trial
Database for QS Reports\Lot Log Report.xlsx"
DeleteFile (filename)
DoCmd.OutputTo acOutputQuery, "LLUnion", "ExcelWorkbook(*.xlsx)", filename, False, "", , acExportQualityPrint
ExportLot_Exit:
Exit Function
ExportLot_Err:
MsgBox Error$
Resume ExportLot_Exit
End Function
Function FileExists(ByVal FileToTest As String) As Boolean
FileExists = (Dir(FileToTest) <> "")
End Function
Sub DeleteFile(ByVal FileToDelete As String)
If FileExists(FileToDelete) Then 'See above
' First remove readonly attribute, if set
SetAttr FileToDelete, vbNormal
' Then delete the file
Kill FileToDelete
End If
End Sub
转换后的原始代码(当我从表单中调用 ExportLot 时当前运行的代码):
Function ExportLot()
On Error GoTo ExportLot_Err
Dim filename As String
DoCmd.OutputTo acOutputQuery, "LLUnion", "ExcelWorkbook(*.xlsx)","\\server1\Trial Database for QS Reports\Lot Log Report.xlsx", False,"", , acExportQualityPrint
ExportLot_Exit:
Exit Function
ExportLot_Err:
MsgBox Error$
Resume ExportLot_Exit
End Function
【问题讨论】:
-
您确定您的关闭事件是指新的 VB 代码而不是原始宏吗?
-
@DonGeorge VBA 代码和原始访问宏的标题相同。我认为在 Access 中制作的原始宏和在 VBA 中编辑的代码是链接的,我错了吗?
-
让我们停止猜测,请以宏或 VBA 的形式向我们展示 OnClose 事件。然后我们就可以知道触发了什么。
-
@Parfait 在我上面描述的方法中没有要显示的 OnClose 事件,因为我使用访问表单界面来选择表单关闭后要运行的代码。但正如我在下面的回答中强调的那样,问题已经解决了。