0
我正在將篩選結果從我的子表單導出到Excel,並根據需要命名Excel文件。這裏是我的代碼:訪問 - 使用自定義文件名導出子表單篩選結果
Sub XcelExport()
Dim Results As Recordset
Dim RecCount As Integer
Dim XcelFileName As String
Dim FilePath As String
Dim wb As Excel.Workbook
Dim XcelFile As Excel.Application
'Set name of file with date
XcelFileName = "MySubform_Results_" & Format(Date, "dd/mm/yyyy") & ".xlsx"
' Set destinaton folder of saved file
FilePath = CurrentProject.Path & "\" & XcelFileName
Set XcelFile = New Excel.Application
Set wb = XcelFile.Workbooks.Add
'Fetch subform record source
Set Results = Forms![MainForm]![MySubform].Form.RecordsetClone
With wb
XcelFile.ScreenUpdating = False
' Add field names to workbook
For RecCount = 0 To Results.Fields.Count - 1
XcelFile.Cells(1, RecCount + 1).Value = Results.Fields(RecCount).Name
Next RecCount
' Copy subform results to Excel file
XcelFile.Range("A2").CopyFromRecordset Results
.SaveAs Filename:=FilePath, FileFormat:=51
XcelFile.ScreenUpdating = True
.Close
End With
Set XcelFile = Nothing
Set Results = Nothing
End Sub
代碼工作,只有一個缺陷。當我再次運行它時,它會再次創建一個新文件,但.RecordsetClone
已不存在,因此Subform中的值不會再次導出。除此之外,我發現代碼的工作很奇怪,只需看看»with wb«語句 - 我必須在某些命令中引用XcelFile
,或者它們不起作用,無論我是否已經在上面的代碼中將wb設置爲XcelFile Set wb = XcelFile.Workbooks.Add
)。我的代碼有什麼問題,有沒有人有更好的解決方案?
@HansUp,我無法解釋。主窗體與子窗體打開並顯示結果,但當我點擊第二次嘗試上面的代碼與Cmdbutton時,創建一個新文件,但不會再次導出子窗體的記錄集,所以我必須重新打開我的主窗體,其中子窗體位於。所以,簡而言之,第一次代碼有效,第二次不行。我只是想知道爲什麼? – LuckyLuke82
不,當我有我的主窗體打開子窗體,並且我第二次運行代碼時,Access打開提示窗口該文件已存在,如果我想替換它(這就是o.k.,這就是它應該如何工作)。但是當我打開第二個文件時,Subform結果不存在,只會插入字段名稱。並且只有一個工作表。 – LuckyLuke82
所以你有任何想法如何改變代碼,或者在這裏弄清楚什麼是錯誤的? – LuckyLuke82