2016-02-29 26 views
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)。我的代碼有什麼問題,有沒有人有更好的解決方案?

+0

@HansUp,我無法解釋。主窗體與子窗體打開並顯示結果,但當我點擊第二次嘗試上面的代碼與Cmdbutton時,創建一個新文件,但不會再次導出子窗體的記錄集,所以我必須重新打開我的主窗體,其中子窗體位於。所以,簡而言之,第一次代碼有效,第二次不行。我只是想知道爲什麼? – LuckyLuke82

+0

不,當我有我的主窗體打開子窗體,並且我第二次運行代碼時,Access打開提示窗口該文件已存在,如果我想替換它(這就是o.k.,這就是它應該如何工作)。但是當我打開第二個文件時,Subform結果不存在,只會插入字段名稱。並且只有一個工作表。 – LuckyLuke82

+0

所以你有任何想法如何改變代碼,或者在這裏弄清楚什麼是錯誤的? – LuckyLuke82

回答

0
So this is final code, I hope It will be useful to someone else too. 

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 and set Results to first row 
Results.Movefirst 
XcelFile.Range("A2").CopyFromRecordset Results 

.SaveAs Filename:=FilePath, FileFormat:=51 
XcelFile.ScreenUpdating = True 
.Close 
End With 
Set XcelFile = Nothing 
Set Results = Nothing 
End Sub