VBA导出子表单

时间:2017-06-23 09:43:25

标签: ms-access access-vba

我试图在按钮上导出一个子窗体但是所有我得到的各种错误大多数似乎无法识别子窗体对象。我认为最接近的是:

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

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

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

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

savefileas =

    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

2 个答案:

答案 0 :(得分:2)

我不认为这会起作用。

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

它不适用于已打开的对象,甚至更少用于具有已修改记录源的子表单。

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

答案 1 :(得分:1)

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

为了解决类似问题,可以帮助其他任何人。

我导出到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

然后每个更新过滤器都是on open的副本,因此每次设置子窗体记录集IE时,它都会设置用于导出的查询。