昱得資訊工作室
麻辣學園
歡迎光臨, 訪客. 請先 登入註冊一個帳號.
您忘了 啟用您的帳號嗎?
2009-01-07, 05:52:51
世界展望會助學計劃
首頁 說明 登入 註冊 贊助論壇 想當作者?
新聞: Wink有贊助本論壇經營的會員,請務必來信通知小誌,這樣才能為您更新會員群組喔!!


+  麻辣家族討論區
|-+  MS Office 系列
| |-+  EXCEL
| | |-+  進階應用專區
| | | |-+  範例程式:以 SQL 方式操作 Excel
0 會員 以及 1 訪客 正在閱讀本篇主題. « 上一篇主題 下一篇主題 »
頁: [1] 向下 列印
作者 主題: 範例程式:以 SQL 方式操作 Excel  (閱讀 4968 次)
Chris
中學生
*
離線 離線

文章: 70


範例程式:以 SQL 方式操作 Excel
« 於: 2005-07-29, 23:34:58 »

还有《Excel VBA 747个应用范例技巧全集》,博硕文化出版

感謝分享好書資訊。

另,以下是某位網友問我的一個典型 SQL 問題:如何合併 xls 檔中任意數目的工作表?

假設資料檔是『C:\這個檔案有眾多欄位相同的工作表.xls』。所謂『眾多欄位相同的工作表』,就是每個工作表的(第一列)欄位皆相同。

我將程式 post 如下以饗諸君:

Sub merge()
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  Dim s As Integer
  While ActiveWorkbook.Sheets.Count > 1
    Sheets(1).Delete
  Wend
  Sheets(1).Name = "Tables"
  
  Cells.Clear
  
  Dim c As ADODB.Connection
  Set c = CreateObject("ADODB.Connection")
  c.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};Dbq=C:\這個檔案有眾多欄位相同的工作表.xls"
  c.Open

  Dim r As ADODB.Recordset
  Set r = c.OpenSchema(adSchemaTables)
  Range("A1").CopyFromRecordset r
  c.Close

  Sheets.Add After:=Sheets(1)

  Dim i, t, f As Integer
  t = Sheets(1).UsedRange.Rows.Count
  For i = 1 To t
    c.Open
    Set r.ActiveConnection = c
    r.Open ("select * from [" + Sheets(1).Cells(i, 3) + "]")
    If i = 1 Then
      For f = 0 To r.Fields.Count - 1
        Sheets(2).Cells(1, f + 1) = r.Fields(f).Name
      Next
    End If
    Sheets(2).Cells(Sheets(2).UsedRange.Rows.Count + 1, 1).CopyFromRecordset r
    c.Close
  Next
  Sheets(2).Cells.EntireColumn.AutoFit
  Sheets(2).Name = "合併結果"

  Sheets(1).Delete
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub

引用自: leonchou
本主題係由 [書籍推薦]EXCEL巨集魔法書 分拆的。
« 最後編輯時間: 2005-08-08, 01:09:24 由 leonchou » 已記錄
Chris
中學生
*
離線 離線

文章: 70


範例程式:以 SQL 方式操作 Excel
« 回覆文章 #1 於: 2005-08-07, 08:23:40 »

後來,他又問到那應該如何合併 mdb 檔案中的 table(s),其實原理是完全一樣的,只不過資料庫連線字串改一下、以及過濾 Table 即可(SYSTEM TABLE 不要抓它)
 
請將 mdb 檔與以下程式碼都複製至 c:\ 根目錄下。

程式碼如下:

Sub merge()
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  Dim s As Integer
  While ActiveWorkbook.Sheets.Count > 1
    Sheets(1).Delete
  Wend
  Sheets(1).Name = "Tables"
  
  Cells.Clear
  
  Dim c As ADODB.Connection
  Set c = CreateObject("ADODB.Connection")
  c.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydata.mdb"
  c.Open

  Dim r As ADODB.Recordset
  Set r = c.OpenSchema(adSchemaTables)
  Range("A1").CopyFromRecordset r
  c.Close

  Sheets.Add After:=Sheets(1)

  Dim i, t, f As Integer
  t = Sheets(1).UsedRange.Rows.Count
  For i = 1 To t
    If Sheets(1).Cells(i, 4) = "TABLE" Then
      c.Open
      Set r.ActiveConnection = c
      r.Open ("select * from [" + Sheets(1).Cells(i, 3) + "]")
      If i = 1 Then
        For f = 0 To r.Fields.Count - 1
          Sheets(2).Cells(1, f + 1) = r.Fields(f).Name
        Next
      End If
      Sheets(2).Cells(Sheets(2).UsedRange.Rows.Count + 1, 1).CopyFromRecordset r
      c.Close
    End If
  Next
  Sheets(2).Cells.EntireColumn.AutoFit
  Sheets(2).Name = "合併結果"

  Sheets(1).Delete
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub
已記錄
頁: [1] 向上 列印 
« 上一篇主題 下一篇主題 »
自訂搜尋
跳到:  

本頁花了 0.246 秒, 以及 20 次的資料庫查詢.