[英]How to export database table data into excel using sql stored procedure
[英]How to export message box display data in excel to access database table using vba
我在vba中有一個代碼,通過該代碼,每當我將任何新值保存在特定的單元格中時,它將在消息框中顯示該單元格中存儲的舊值是什么,而我剛剛在下面保存的新值是該代碼
Option Explicit
Dim OldVals As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myCell As Range
For Each myCell In Target
If OldVals.Exists(myCell.Address) Then
MsgBox "New value of " & Replace(myCell.Address, "$", "") & " is " & myCell.Value & "; old value was " & OldVals(myCell.Address)
Else
MsgBox "No old value for " + Replace(myCell.Address, "$", "")
End If
OldVals(myCell.Address) = myCell.Value
Next myCell
End Sub
所以我想使用vba一個接一個地將消息框中顯示的值導出到Access數據庫表
但是我寫了一個代碼來導出和保存excel工作表單元格的值到訪問數據庫表中,代碼如下
Const TARGET_DB = "\Database3.accdb"
Sub PushTableToAccess()
Dim cnn As ADODB.Connection
Dim MyConn
Dim rst As ADODB.Recordset
Dim i As Long, j As Long
Dim Rw As Long
Sheets("Sheet1").Activate
Rw = Range("A1").End(xlDown).Row
Set cnn = New ADODB.Connection
MyConn = ThisWorkbook.Path & Application.PathSeparator & TARGET_DB
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open Source:="Table1", ActiveConnection:=cnn, _
CursorType:=adOpenDynamic, LockType:=adLockOptimistic, _
Options:=adCmdTable
For i = 2 To Rw
rst.AddNew
For j = 1 To 3
rst(j) = Cells(i, j).Value
Next j
rst.Update
Next i
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
上面的代碼將導出所有值並將其保存在excel單元格中,以訪問數據庫表。
但是我不確定如何將這兩個代碼組合在一起,以便我的第一個代碼每當將顯示單元格的舊值和新值時,當我單擊“確定”按鈕時,它將導出並保存在消息框中顯示的值(例如,新值A1的值是7;舊值是88)一個接一個地訪問數據庫表。
似乎您想對Excel工作簿的所有更改進行審核/記錄功能。
您有兩段代碼,一段用於識別更改,另一段將信息寫入數據庫,您需要將其組合起來。 然后產生的功能就是將用戶所做的每一個更改寫入數據庫。
您擁有的代碼應為您提供有關特定VBA語句的足夠指導。 我將這種解決方案限制為該方法。
由於在用戶打開工作表的整個過程中都需要數據庫連接,因此應該在Workbook Open事件中建立數據庫連接:
Public cnn As ADODB.Connection
Public MyConn
Private Sub Workbook_Open()
Set cnn = New ADODB.Connection
MyConn = ThisWorkbook.Path & Application.PathSeparator & TARGET_DB
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
End Sub
然后,您繼續進行Change事件:
Private Sub Worksheet_Change(ByVal Target As Range)
'.... (your code to get the change)
Set rst = New ADODB.Recordset
rst.AddNew ' allocate new record
rst(j) = Cells(i, j).Value ' populate the record (this must be your code)
rst.Update ' update/insert record
rst.Close ' done record.
End Sub
最后,在Workbook_BeforeClose事件中關閉數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.