標題:
[發問]
在excel中資料新增後,Access資料表中的資料會自動更新
[打印本頁]
作者:
Changbanana
時間:
2016-9-6 10:46
標題:
在excel中資料新增後,Access資料表中的資料會自動更新
請教各位高手~
目前資料型態有兩個 一個是EXCEL另一個是Access
想要excel的資料新增後
按個按鈕,Access裡的資料就會自動更新
excel:
[attach]25151[/attach]
access:
[attach]25150[/attach]
因為這個錄製巨集也無法成功
網上是有找到直接產生一個資料表
但因還想要用原來的資料表,不要每次更新就新增一個資料表,只需更新資料
要怎麼在excel可以直接操作access的同個資料表呢?
麻煩了~謝謝^ ^
作者:
lpk187
時間:
2016-9-6 13:04
本帖最後由 lpk187 於 2016-9-6 13:09 編輯
回復
1#
Changbanana
[attach]25159[/attach]
給你參考
作者:
Changbanana
時間:
2016-9-6 15:10
本帖最後由 Changbanana 於 2016-9-6 15:12 編輯
回復
2#
lpk187
謝謝你的答覆
目前若是跑三欄的資料和都有值的話是都有複製過去
但有發現若是中間有空資料就無法做了
可以把key值改成ID嗎?
還有增加欄位的話是不是這樣做?
Public Sub 匯出()
Dim arr, i%
Dim myCon As Object, myRs As Object, sql$
Set myCon = CreateObject("ADODB.Connection")
Set myRs = CreateObject("ADODB.Recordset")
myCon.Open "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\test.accdb;"
arr = Sheets(1).Range("[color=Red]D1[/color]", Sheets(1).[A65535].End(xlUp))
Set myRs = Nothing
For i = 1 To UBound(arr)
sql = "SELECT * FROM 資料表1 WHERE 資料表1.名稱 Like '" & arr(i, 1) & "';"
Set myRs = myCon.Execute(sql)
If myRs.EOF = True Then
sql = "INSERT INTO " & "資料表1" & "(名稱,ID,成績國,[color=Red]成績數[/color])" & _
" VALUES('" & arr(i, 1) & "','" & arr(i, 2) & "','" & arr(i, 3) & "'[color=Red]," & arr(i, 4) & "[/color]);"
Set myRs = myCon.Execute(sql)
End If
Set myRs = Nothing
Next
Set myRs = Nothing
myCon.Close
Set myCon = Nothing
End Sub
複製代碼
成績數
是想要增加欄位的資料~
作者:
lpk187
時間:
2016-9-6 15:36
回復
3#
Changbanana
把你檔案放上來吧
作者:
lpk187
時間:
2016-9-6 16:37
回復
3#
Changbanana
儲存格中沒有資料,在VBA陣列中並不會以為是Null值
而SQL語言中則是必須給他Null值
所以在arr中有空白處,必須把它改成"Null"
所以要多個迴圈去更改他的空值
INSERT INTO是新增資料,若修改表格中的資料就需要用到UPDATE 指令
有關SQL語法,請自行Google "SQL"
Public Sub 匯出()
Dim arr, i%
Dim myCon As Object, myRs As Object, sql$
Set myCon = CreateObject("ADODB.Connection")
Set myRs = CreateObject("ADODB.Recordset")
myCon.Open "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\test.accdb;"
arr = Sheets(1).Range("C1", Sheets(1).[A65535].End(xlUp))
For i = 1 To UBound(arr)
For j = 1 To UBound(arr, 2)
aa = arr(i, j)
If arr(i, j) = Empty Then
arr(i, j) = "Null"
End If
Next
Next
Set myRs = Nothing
For i = 1 To UBound(arr)
sql = "SELECT * FROM 資料表1 WHERE 資料表1.名稱 Like '" & arr(i, 1) & "';"
Set myRs = myCon.Execute(sql)
If myRs.EOF = True Then
sql = "INSERT INTO " & "資料表1" & "(名稱,ID,成績)" & _
" VALUES('" & arr(i, 1) & "','" & arr(i, 2) & "'," & arr(i, 3) & ");"
Set myRs = myCon.Execute(sql)
End If
Set myRs = Nothing
Next
Set myRs = Nothing
myCon.Close
Set myCon = Nothing
End Sub
複製代碼
作者:
lpk187
時間:
2016-9-6 17:36
本帖最後由 lpk187 於 2016-9-6 17:38 編輯
回復
3#
Changbanana
反過來 在匯入資料時,ax = myRs.GetRows是都有資料的情況下使其成為陣列,
但是其中若有空值時(Null),其ax陣列中也會為Null 所以不能用陣列直接輸入資料
所以匯入也要修改
Public Sub 匯入()
Dim myRs As ADODB.Recordset '連結資料表
Dim myCon As Object, sql$
Set myCon = CreateObject("ADODB.Connection")
Set myRs = CreateObject("ADODB.Recordset")
myCon.Open "provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.Path & "\test.accdb;"
Sheets(1).Range("C1", Sheets(1).[A65535].End(xlUp)).Clear
sql = "SELECT * FROM 資料表1 ORDER BY 資料表1.ID;"
Set myRs = myCon.Execute(sql)
ro = 1
Do While Not myRs.EOF
Sheets(1).Cells(ro, 1) = myRs.Fields(0).Value
Sheets(1).Cells(ro, 2) = myRs.Fields(1).Value
Sheets(1).Cells(ro, 3) = myRs.Fields(2).Value
ro = ro + 1
myRs.MoveNext
Loop
Set myRs = Nothing
myCon.Close
Set myCon = Nothing
End Sub
複製代碼
作者:
Changbanana
時間:
2016-9-7 21:31
回復
4#
lpk187
[attach]25173[/attach]
以上附上檔案~~
謝謝你的幫忙
還在研究中@@
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)