【问题标题】:Update Access database through Excel sheet通过 Excel 工作表更新 Access 数据库
【发布时间】:2025-12-04 15:30:01
【问题描述】:

我正在尝试通过此代码更新 Access 中的表,但它显示错误消息“用户定义类型未定义”。如何解决这个问题呢? 在此输入代码

Sub UpdateClick()
   Dim conn As ADODB.Connection
   Dim myRecordset As ADODB.Recordset
   Dim strConn As String
Dim s As String
Set s = "C:\Users\PC2\Documents\Database2.accdb"

   strConn = "Provider=Microsoft.Jet.OLEDB.4.0 Data Source=s"
Set strConn = New ADODB.Connection

   Set myRecordset = New ADODB.Recordset

   With myRecordset
      .Open "Select * from PersonInformation", strConn, adOpenKeyset, adLockOptimistic
      .Fields("ID").Value = Worksheets("Sheet1").Range("A2").Value
      .Fields("FName").Value = Worksheets("Sheet1").Range("B2").Value
      .Fields("LName").Value = Worksheets("Sheet1").Range("C2").Value
      .Fields("Address").Value = Worksheets("Sheet1").Range("D2").Value
      .Fields("Age").Value = Worksheets("Sheet1").Range("E2").Value
      .Update
      .Close
   End With

   Set myRecordset = Nothing
   Set conn = Nothing
End Sub

【问题讨论】:

  • 您是否在引用中包含了 microsoft access 对象库?只是好奇。
  • 当我添加库时它显示消息“与现有模块、项目、对象库的名称冲突”
  • 尝试将行 strConn = "Provider=Microsoft.Jet.OLEDB.4.0 Data Source=s" 更改为 strConn = "Provider=Microsoft.Jet.OLEDB.4.0 Data Source=" & s。还要从定义s 值的位置删除Set 语句。

标签: excel vba ms-access


【解决方案1】:

在我发表评论后,我注意到您的错误不仅仅是连接问题。
将您的代码调整为以下示例 - 诸如 https://www.connectionstrings.com/access/ 之类的网站将向您显示要为您的 Access 版本使用的字符串。

Sub FillArrayAccess()

    Dim oConn As Object
    Dim myRecordset As Object
    Dim sConn As String
    Dim s As String

    s = "C:\Users\PC2\Documents\Database2.accdb"

    'Your connection string will change depending on the Access version.
    sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & s
    'sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & s 'Access 2010

    Set oConn = CreateObject("ADODB.Connection")
    oConn.Open sConn

    Set myRecordset = CreateObject("ADODB.RecordSet")
    myRecordset.Open "PersonInformation", oConn, 1, 3, &H2

    With myRecordset
        .AddNew
        .Fields("ID").Value = Worksheets("Sheet1").Range("A2").Value
        .Fields("FName").Value = Worksheets("Sheet1").Range("B2").Value
        .Fields("LName").Value = Worksheets("Sheet1").Range("C2").Value
        .Fields("Address").Value = Worksheets("Sheet1").Range("D2").Value
        .Fields("Age").Value = Worksheets("Sheet1").Range("E2").Value
        .Update
        .Close
    End With

    Set myRecordset = Nothing
    Set oConn = Nothing

End Sub

编辑:已更新代码以处理原始海报数据。

【讨论】: