請問各位前輩:
不曉得要怎麼將所打開的Recordset資料,用copy然後再貼上到excel內,因我現在只知道用一條一條記錄匯至excel內,如果資料一多時,作業就很慢,所以想用別的方法看能不能快一些,所以想請教各位前輩怎麼在vb內直接copy Recordset所有資料,然後再貼上到excel內,
麻煩各位前輩指導.....thanks
創作者介紹
創作者 vbqa 的頭像
vbqa

小吳 VBQA 程式設計討論

vbqa 發表在 痞客邦 留言(9) 人氣()


留言列表 (9)

發表留言
  • VoVo-Chen
  • 看不很懂~你要什麼?
  • San
  • 用sql語法....做兩個connection..然後使用insert into即可..
  • Franma
  • 請問 SAN兄, 怎麼下兩個 cnn 用 insert into 呢?? 怎麼寫呢? 謝謝
  • bonnie
  • 以下是我目前所知道的一筆一筆記匯至excel,我所要問的是因為一筆一筆記錄的匯太慢了,所以看可不可以用複製貼上的效果來做會比較快些,而San前輩所說的我看不是很懂,可否請前輩進一步說明呢??
    ........thanks
    Dim intRowCnt         As Integer     
      Dim intColCnt         As Integer     
      Dim objExcel            As Excel.Application
      Dim objFld             As Field
      Dim objWorkbook           As Excel.Workbook
      Dim objWorksheet          As Excel.Worksheet

    If blnHeaders Then
        intColCnt = 1
        For Each objFld In objRst.Fields

    objWorksheet.Cells(1, intColCnt).Value = objFld.Name
              objWorksheet.Cells(1, intColCnt).Interior.ColorIndex = 33
              objWorksheet.Cells(1, intColCnt).Font.Bold = True
              objWorksheet.Cells(1, intColCnt).BorderAround xlContinuous
              intColCnt = intColCnt + 1

    Next objFld
      End If

    '匯出資料至Excel 表身部份相關設定作業。
      objRst.MoveFirst
      intRowCnt = 2

    Do While Not objRst.EOF()
        intColCnt = 1
        For Each objFld In objRst.Fields

    objWorksheet.Cells(intRowCnt, intColCnt).Value = objRst.Fields(objFld.Name).Value
              intColCnt = intColCnt + 1

    Next objFld
        objRst.MoveNext
        intRowCnt = intRowCnt + 1
      Loop

    ' Excel 自動調整欄寬
      intColCnt = 1

    For Each objFld In objRst.Fields

    objWorksheet.Columns(intColCnt).AutoFit
            intColCnt = intColCnt + 1

    Next objFld
  • San
  • 你上述的程式碼是一個一個的新增至excel中...而我所謂的insert into方法...即是先將excel建立好...然後工作表(即資料庫觀念中的table)...然後建立一conn1...provider為excel的那個driver..王國榮的書上有...有點忘了...改天翻到再post上來..或查全文檢索...然後原資料庫建成conn2...然後開啟rs為conn2
    while rs.eof
    sql="insert into execltable (fields) values (values)
     conn1.execute(sql)
     rs.movenext
    wend
    這是方法一....
    而若是同一個conn的話..應該可以做select table insert table....效率更快....兩個connection的話..我就不清楚可不可以做了....
  • 呆子
  • 請問 San 大哥, 如果是在 Excel 中
    使用 VBA 撰寫上述程式
    是否可以只用一個 Conn?
    要如何做呢?
  • San
  • TO:呆子.
    照理說應該是可以的....在不同的sheet存放著不同的資料當做資料庫..以vba來運作
    在資料庫及ADO的觀念中
    execl.xls=database=connection
    sheet=table=RecordSet
    跟一般存取資料庫的狀況差不多...所以使用同一個connection後..僅rs不同..用sql下指令即可達成了....
  • 呆子
  • 謝謝 San 兄
    我嘗試使用 Excel 的 VBA 建立 Connection 及 RecordSet
    然後將 RecordSet 放到 Sheet 中
    速度果然大幅的改進,
    比起 SQL -> VB -> Excel 快了許多
  • KEN
  • Set xlApp = CreateObject("Excel.Application")
    If xlApp.Workbooks.Count = 0 Then
    Set xlBook = xlApp.Workbooks.Open("D:\報表\xxxx.xls")  
    End If
    rs.Open "select * from table ", cn, adOpenKeyset,adLockOptimistic
    xlBook.Sheets(1).Range("A4").CopyFromRecordset rs
    應該可以吧!