【问题标题】:VBA Export subformVBA 导出子窗体
【发布时间】:2017-06-23 20:35:56
【问题描述】:

我正在尝试按按钮导出子表单,但我得到的只是各种错误,主要是它似乎无法识别子表单对象。我认为最接近的是以下内容:

    DoCmd.OutputTo acOutputForm, Me.Form.<Subform_name>.Name, acFormatXLSX, savefileas, True

subform_name 是主窗体中的对象名称 subform_form 源表单

子表单不是来自单独的查询,而是从父表单的 VBA 设置记录集

此 vba 上的错误是 2102 = "表单名称拼写错误或引用的表单不​​存在。"

保存文件 =

    Public Function savefileas() As String
Dim fd As FileDialog, filename As String

On Error GoTo ErrorHandler

 Set fd = Application.FileDialog(msoFileDialogSaveAs)

 If fd.Show = True Then
     If fd.SelectedItems(1) <> vbNullString Then
         filename = fd.SelectedItems(1)
     End If
 Else
     'Stop Code Execution for Null File String
     End
 End If
 savefileas = filename & ".xlsx"

 'Cleanup
 Set fd = Nothing
 Exit Function

ErrorHandler:
 Set fd = Nothing
 MsgBox "Error " & Err & ": " & Error(Err)
 End Function

【问题讨论】:

  • 尝试使用Me.&lt;Subform_name&gt;.SourceObject代替Me.Form.&lt;Subform_name&gt;.Name
  • 这行得通,谢谢,但是它显示的是完整列表,而不是已被记录源的父表单设置过滤的显示列表。我猜这是由于将其设置为提取原始子表单而不是使用精心制作的记录源的嵌套子表单

标签: ms-access vba


【解决方案1】:

我认为这行不通。

DoCmd.OutputTo 想要单独打开对象,然后将其导出。
第二个参数ObjectName不是对象引用,而是对象名。

它不适用于已经打开的对象,更不用说修改记录源的子表单了。

更好的方法是使用子表单的记录源创建一个临时的 querydef。
然后导出这个查询。

【讨论】:

  • 我已经在构建一个临时查询来设置子表单记录源,所以如果我只是添加到它来设置 querydef Id 只需要调用它来导出。马上进行实验并报告
  • 感谢您以正确的方式推动我,我发布了完整的步骤以使其为他人受益
【解决方案2】:

感谢安德烈的推动,我现在可以按照我想要的方式工作,这可能不是最有效的方法,但我得到了我想要的结果。

帮助任何其他可能为此寻求类似解决方案的人。

我正在导出为 csv,这是我想要的理想格式。
导出按钮:

    Private Sub Command2_Click()
DoCmd.TransferText acExportDelim, exportcsv, "export_query", savefileas, True

End Sub

打开时

    Private Sub Form_Open(Cancel As Integer)
Dim strSQL As String
Dim export_query As QueryDef
Dim db As Database
Set db = CurrentDb
strSQL = <sql statement as defined by set record code>

<code that sets my subform record source> 

Set export_query = db.QueryDefs("Export_Query")
export_query.SQL = strSQL    
End Sub

然后更新时的每个过滤器都是打开时的副本,因此每次设置子表单记录集 IE 显示的内容时,它都会设置用于导出的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多