You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA按钮创建数据录入表单时遇‘Object Required’错误求助

解决Access VBA插入数据时的“Object Required”错误

嘿,我一眼就揪出你代码里的问题了——你用Set关键字给字符串变量sSQL赋值,这就是触发“Object Required”错误的核心原因!

问题根源

Set在VBA里是专门给对象类型(比如Recordset、QueryDef这类)赋值的关键字,而你声明的sSQL是普通字符串变量,完全不需要用Set。当VBA看到Set sSQL = "INSERT..."时,会误以为sSQL是一个对象,但实际上它只是个普通字符串,自然就抛出“需要对象”的错误了。

修正后的基础代码

把Set去掉,直接给字符串赋值就行,补全你的SQL语句后大概是这样:

Private Sub Command28_Click()
    Dim sSQL As String
    ' 移除Set关键字,直接赋值SQL语句
    sSQL = "INSERT INTO TEST (Carrier_Ent_ID, Row_Insert_TS, Row_Update_TS, Row_Insert_User_ID, Row_Update_User_ID) " & _
           "VALUES ('" & Me.Carrier_Ent_ID.Value & "', Now(), Now(), '" & Environ("Username") & "', '" & Environ("Username") & "')"
    
    ' 执行SQL,加上dbFailOnError参数,出错时会抛出具体信息方便排查
    CurrentDb.Execute sSQL, dbFailOnError
    MsgBox "数据插入成功!", vbInformation
End Sub

更安全的进阶写法(避免SQL注入)

如果用户输入的内容可能包含特殊字符(比如单引号),直接拼接字符串容易出错甚至有安全风险,推荐用参数查询:

Private Sub Command28_Click()
    Dim qd As QueryDef
    Dim sSQL As String
    
    ' 定义带参数占位符的SQL模板
    sSQL = "INSERT INTO TEST (Carrier_Ent_ID, Row_Insert_TS, Row_Update_TS, Row_Insert_User_ID, Row_Update_User_ID) " & _
           "VALUES ([pCarrierID], Now(), Now(), [pUser], [pUser])"
    
    ' 创建临时查询对象
    Set qd = CurrentDb.CreateQueryDef("", sSQL)
    ' 给参数赋值
    qd.Parameters("pCarrierID") = Me.Carrier_Ent_ID.Value
    qd.Parameters("pUser") = Environ("Username")
    
    ' 执行查询
    qd.Execute dbFailOnError
    ' 释放对象资源
    Set qd = Nothing
    
    MsgBox "数据插入成功!", vbInformation
End Sub

提示:你需要根据实际的表单控件和数据库字段,调整代码里的字段名、控件名以及参数值哦!

内容的提问来源于stack exchange,提问作者RC94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:35:21