
我想在VBA里用ADO把姓名對應的拼音查找出來,但是代碼怎么寫都不對,求高手解答。

Sub SQL程式()
Dim conn
Dim sql As String
'-------------------------------------------------------
spath = ActiveWorkbook.FullName 'ActiveWorkbook.FullName為當前excel檔案路徑
sql = "update [Excel 8.0;DATABASE=" & spath & "].[Sheet1$] A,[Excel 8.0;DATABASE=" & ActiveWorkbook.Path & "\測驗1.xls].[Sheet1$] B SET A.[拼音]=B.[拼音] where A.[姓名]=B.[姓名]"
Debug.Print sql
'-------------------------------------------------------
Set conn = CreateObject("adodb.connection") '創建ado物件
'Set rst = CreateObject("ADODB.recordset") '創建記錄集
If Application.Version >= 15 Then
'呼叫資料庫型別----------------------------------------
'針對Excel2013資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;HDR=yes;imex=1';data source=" & spath
ElseIf Application.Version >= 14 Then
'針對Excel2010以前的資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 8.0;HDR=YES';data source=" & spath
ElseIf Application.Version >= 11 Then
'針對Excel2003以前的資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=YES';data source=" & spath
End If
'Set rst =conn.Execute(sql) '查詢出的資料寫入記錄集
'arr = rst.GetRows() '記錄集資料寫入二維陣列
'輸出欄位名---------------------------------------
'Set rst = cn.Execute(sql) '記錄集
'For i = 1 To rst.Fields.Count '回圈欄位
'Cells(1, i) = rst(i - 1).Name '錄入欄位名
'Next '下一回圈
'-------------------------------------------------
conn.Execute (sql)
conn.Close
Set conn = Nothing
End Sub
uj5u.com熱心網友回復:
以上問題我自己終于解決了。首先ADO呼叫oledb要賦予讀寫權限,即IMEX=3,然后update陳述句中,跨作業簿呼叫的資料表也要宣告寫入權限,即IMEX=2,總之,我在電腦前坐了10個小時才解決這個問題……5555……Sub SQL程式()
Dim conn
Dim sql As String
'-------------------------------------------------------
spath = ActiveWorkbook.FullName 'ActiveWorkbook.FullName為當前excel檔案路徑
sql = "update [Sheet1$] A,[Excel 8.0;HDR=yes;imex=2;DATABASE=" & ActiveWorkbook.Path & "\測驗1.xls].[Sheet1$] B SET A.[拼音]=B.[拼音] where A.[姓名]=B.[姓名]"
'-------------------------------------------------------
Set conn = CreateObject("adodb.connection") '創建ado物件
'Set rst = CreateObject("ADODB.recordset") '創建記錄集
If Application.Version >= 15 Then
'呼叫資料庫型別----------------------------------------
'針對Excel2013資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;HDR=yes;imex=3';data source=" & spath
ElseIf Application.Version >= 14 Then
'針對Excel2010以前的資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 8.0;HDR=YES;imex=3';data source=" & spath
ElseIf Application.Version >= 11 Then
'針對Excel2003以前的資料參考微軟引擎,最后添加資料庫路徑
conn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=YES;imex=3';data source=" & spath
End If
conn.Execute (sql)
conn.Close
Set conn = Nothing
End Sub
uj5u.com熱心網友回復:
好吧,恭喜樓主…………uj5u.com熱心網友回復:
樓主對SQL很是情有獨鐘啊................uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
樓主多年前的奉獻竟然解了今日我的困惑,萬分感謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/15129.html
標籤:VBA
上一篇:請求一個頁面程式,運行vb程式,自動打開某個網頁,定時每天3點、5點,模擬滑鼠點擊網頁的某個地方
下一篇:VB簡單小題,求大神解
