簡體   English   中英

如何在Excel中導出消息框顯示數據以使用VBA訪問數據庫表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM