【问题标题】:Troubleshooting SaveAs button through MS Access Navigation form通过 MS Access 导航表单对 SaveAs 按钮进行故障排除
【发布时间】:2022-06-24 09:14:58
【问题描述】:

我一直在努力让我的 VBA 工作,但我不知所措,因为我对使用 VBA 或一般编码非常陌生。

我所拥有的基本上是一个导航主窗体,它使用选项卡打开不同的窗体以便于访问。在其中一个子表单上,有一个按钮应该用作“SaveAsPDF”选项。它基本上应该通过打开一个要保存它的文件夹来工作,并将报告版本作为 pdf 导出到该位置。奇怪的是,当您打开实际表单而不是在导航菜单中打开表单时,它可以完美运行,所以我现在不知所措。

如果有人能提供帮助,我们将不胜感激,您将从地板上节省大量头发。我得到的是下面的


Private Sub SaveAsPDF_Click()
Dim fd As FileDialog
On Error goto ErrorHandler

Set fd = Application.FileDialog(msoFileDialogSaveAs)
    With fd
        .InitialFileName = MAFNO & ".pdf"

    End With

If fd.Show Then
    DoCmd.OutputTo acOutputReport, "RptMAFPrint", acFormatPDF, _
    fd.SelectedItems(1), True
End If

Exit sub

ErrorHandler:
Msgbox "An Error occurred, please try again", vbinformation, "Could not save document"
Exit sub

End Sub

就当您打开实际表单时它自行运行而言,它可以完美运行并且没有出现任何错误,但是当从导航菜单选项卡打开它时,它会立即出现错误并尝试保存整个工作簿。 以下错误 https://imgur.com/a/rSynDic

【问题讨论】:

  • 错误信息应以文本形式提供,而不仅仅是难以阅读的图像(如本例中)。 “尝试保存整个工作簿”是什么意思 - 什么工作簿? FrmMAF是主要形式吗?这个提示是来自报告吗?如果不是主表单并且是子表单,则当该表单用作子表单时,对该表单的引用将有所不同。这将导致报表中的引用在找不到表单时触发弹出输入提示。
  • 是的,正如我在问题中所说,数据库使用导航表单并使用选项卡,当您循环浏览选项卡时,它将打开其他表单。但是,当您自己打开 FrmMAF 时,SaveAs 按钮可以正常工作。目前我如何像上面那样设置它,当你打开 FrmMAF 然后你打开报告版本时,它将打开记录所在的相同 ID 号。因此,如果您在记录 1 [ID 1] 上打开了 FrmMAF,然后打开报告版本 (RptMAF),它将打开到 ID 1 的记录
  • 嗯,表单后面的查询有一个表单值参数。当表单被加载时,查询可以获得它的值,但是当表单关闭时,查询正在通过弹出窗口(手动输入)查找它。
  • 当我说“保存工作簿”时,那是我的错误,它是在我在这里发布之前这样做的,因为这是在我更改 Rpt 版本的工作方式之前它会尝试做的事情。但错误是它正在寻找 [ID] 的参数字段,如下所示,带有搜索框 Forms!FrmMAF!ID 请输入值 = ___ 从导航表单打开时,我需要以不同的方式使报告工作吗或者其他的东西?因为只要打开 FrmMAF 并点击 SaveAs,它就可以正常工作。它贯穿一切都很好并且没有问题,但不是来自导航表单
  • 以隐藏模式打开表单,导出完成后关闭。或者找到另一种方式将参数传递给查询。

标签: vba ms-access syntax


【解决方案1】:

这篇文章很久了,但 Kostas 有答案,我可以轻松地编辑 vba 以使其工作。谢谢谢谢kostas,如果我真的可以把你的作为答案,我会的。

如果有人需要的话,下面是 VBA。我可能会在某个时候回去看看我是否可以更好地重写它,但它可以完成大部分工作。 这确实适用于 MS Access 导航表单,并且它不会在 VBA 末尾关闭当前活动选项卡。

Private Sub ButtonSaveAsPDF_Click()
Dim fd As FileDialog
On Error GoTo ErrorHandler

DoCmd.Save
DoCmd.RefreshRecord

'====  Initial Check  ====

If IsNull(Me.TxtMAFNumberTop) Then
    GoTo Leave

ElseIf Not IsNull(Me.TxtMAFNumberTop) Then
    GoTo Start

End If

'====  SaveAs PDF Start  ====
Start:
    Set fd = Application.FileDialog(msoFileDialogSaveAs)
        With fd
        .InitialFileName = TxtMAFNumberTop & ".pdf"
    
        End With

    If fd.Show Then
        DoCmd.OpenForm "FrmMAF", acNormal, , "[ID] = " & ID, , acHidden
        DoCmd.OutputTo acOutputReport, "RptMAFPrint", acFormatPDF, _
        fd.SelectedItems(1), True
        DoCmd.Close , "FrmMAF"

    End If

Exit Sub

Leave:
Exit Sub

ErrorHandler:
    MsgBox "An error occurred trying to print your MAF. Please try the following 
below & try again" & vbCrLf & _
    vbCrLf & _
    "1) Verify current MAF information & fields are correct" & vbCrLf & _
    "2) Cycle Records & try again " & vbCrLf & _
    vbCrLf & _
    "If this problem occurs again please contact your local Administrator", _
    vbCritical + vbRetryCancel, _
    "[Critical] ERROR : SaveAsPDF "

    If vbRetry Then
        GoTo Start
    
    ElseIf vbCancel Then
        Exit Sub
    
    End If

End Sub

【讨论】:

    猜你喜欢
    • 2013-08-13
    • 2014-08-13
    • 2016-04-15
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多