【问题标题】:Access Macro Converted to VBA then Editted only Executing Access Defined Code访问宏转换为 VBA,然后仅编辑执行访问定义的代码
【发布时间】: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 事件,因为我使用访问表单界面来选择表单关闭后要运行的代码。但正如我在下面的回答中强调的那样,问题已经解决了。

标签: ms-access vba


【解决方案1】:

我设法找到了解决此问题的方法或解决方法。我创建了一个新宏 (ExecuteCloseCode),并使用 RunCode 事件来调用问题中定义的函数 (ExportLot())。

然后我使用关闭事件调用“ExecuteCloseCode”。

我不确定为什么这种方法有效,而我之前提出的努力却没有...

【讨论】:

  • 这正是我在之前的评论中的意思——听起来你之前的方法是执行旧的宏,现在,通过这个改变,你正在执行新的 vba 脚本(通过新的宏)。
  • 谢谢@Don,我的问题是如何确定我是在运行旧宏还是在运行新宏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多