返回列表 上一主題 發帖

[發問] 篩選問題

[發問] 篩選問題

請教各位先進2個問題
1.當執行此程式會發生"執行階段錯誤'3704':當物件關閉時,不允許操作",請問要如何修正
2.使用Blade(數值)做篩選,可篩選出想要的資料,但改用entrydate(日期)篩選,程式改為~FROM CFData where entrydate>2012/12/1,卻無法篩選出想要的資料
    請問是否要另外宣告參數條件

Sub aa()
   Dim cnn As New ADODB.Connection
   Dim rst As New ADODB.Recordset
    cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "/Motion.mdb"   
    Sql = "SELECT entrydate,blade INTO [Excel 8.0;DATABASE=c:\test1.XLS].[main] FROM CFData where blade =1"         
    [a2].CopyFromRecordset cnn.Execute(Sql)    -->會發生執行階段錯誤'3704':當物件關閉時,不允許操作    cnn.Close
    cnn.Close
    Set cnn = Nothing
End Sub
使用Blade=1可將Blade為1的資料篩選出來
blade篩選.jpg
2013-1-15 11:14

使用entryDate>2012/12/1,無法篩選2012/12/1以後的資料

entrydate篩選

entrydate篩選.jpg
2013-1-15 11:14

回復 1# jcchiang
1.  Sql = "SELECT entrydate,blade INTO [Excel 8.0;DATABASE=c:\test1.XLS].[main] FROM CFData where blade =1"
      我不太清楚這種不開檔就能存取的語法 , 或錯在哪(雖然看起來挺好用的)
      但底下是另一種作法 , 也許能幫到你
  1. Sub aa()
  2.     Dim sSaveFile As String
  3.     Dim cnn As New ADODB.Connection
  4.     Dim sql As String   

  5.     sSaveFile = "c:\test1.xlsx"   
  6.     cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "/Motion.mdb"

  7.     With Workbooks.Add
  8.         With Sheets(1)
  9.             .Name = "main"  '工作表名稱
  10.             sql = "SELECT entrydate,blade FROM CFData where blade =1"
  11.             .[a2].CopyFromRecordset cnn.Execute(sql)    '複製到A2儲存格
  12.         End With
  13.         .SaveAs sSaveFile
  14.         .Close
  15.     End With
  16.     cnn.Close
  17.     Set cnn = Nothing
  18. End Sub
複製代碼
2.  改 where entrydate>#2012/12/1# 看看

TOP

1.使用先進的作法可解決"當物件關閉時,不允許操作"的問題
但Execl檔案內各資料的標題沒有被複製出來,是否有解決辦法
blade篩選1.jpg
2013-1-15 16:37


2.日期前後加入#可以抓到資料
另外請教個問題,如果日期要使用InputBox輸入
Dim myDate
  Do Until IsDate(myDate)
   myDate = Trim(InputBox("請輸入查詢起始日期", "日期", "YYYY/MM/DD"))
  Loop

where entrydate>myDate -->無法執行,請問語法要如何修正

TOP

回復 3# jcchiang
  1. Sub aa()
  2.     Dim sSaveFile As String
  3.     Dim cnn As New ADODB.Connection
  4.     Dim rst As New ADODB.Recordset
  5.     Dim sql As String
  6.     Dim i As Long
  7.     Dim myDate
  8.       
  9.     Do Until IsDate(myDate)
  10.      myDate = Trim(InputBox("請輸入查詢起始日期", "日期", "YYYY/MM/DD"))
  11.     Loop
  12.    
  13.     sSaveFile = "c:\test1.xlsx"
  14.     cnn.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" & ThisWorkbook.Path & "/Motion.mdb"
  15.     With Workbooks.Add
  16.         With Sheets(1)
  17.             .Name = "main"  '工作表名稱
  18.             sql = "SELECT entrydate,blade FROM CFData where entrydate>" & CLng(CDate(myDate))
  19.             Set rst = cnn.Execute(sql)
  20.             For i = 1 To rst.Fields.Count
  21.                 .Cells(1, i).Value = rst.Fields.Item(i - 1).Name
  22.             Next i
  23.             .[a2].CopyFromRecordset rst   '複製到A2儲存格
  24.         End With
  25.         .SaveAs sSaveFile
  26.         .Close
  27.     End With
  28.     cnn.Close
  29.     Set rst = Nothing
  30.     Set cnn = Nothing
  31. End Sub
複製代碼

TOP

謝謝指導,目前問題已解決

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題