在Excel中用VBA将数据导入Access,显示“自动化错误”

在Excel中写了如下代码,目的是将“Sheet1”工作表中的数据导入Access数据库“Database1”中的“表1”:

Sub test()
    Dim conn As ADODB.Connection
    Set conn = New ADODB.Connection
    conn.open "provider = microsoft.ace.oledb.12.0; data source = " & thisworkbook.path & "\Database1.accdb"
    conn.execute "delete from 表1"
    conn.execute "insert into 表1 select * from [Excel 12.0; database = " & thisworkbook.name & "].[Sheet1$]"
    conn.execute "insert into 表2 select * from 表3"
    conn.close
End Sub

但是其他代码都能正常执行,只有 conn.execute "insert into 表1 select * from [Excel 12.0; database = " & thisworkbook.name & "].[Sheet1$]" 这句会报错如下:

img

更奇怪的是,这句代码前一天完全可以正常运行没有问题,一天之后再运行就报错了,中间没有动过。

求指教是什么问题。感谢!

引用 皆我百晓生 小程序回复内容作答:

这个错误通常是由于出现了不兼容的数据类型或格式引起的。可以尝试以下解决方法:

  1. 检查Access数据库中的数据类型和Excel中的数据类型是否匹配。例如,确保目标表(“表1”)中的字段数据类型与Excel数据匹配。

  2. 检查Excel中数据是否有空值或其他不兼容的数据引起的错误。可以尝试删除表格中的所有空值,并确保所有数据与目标表的数据类型一致。

  3. 确保数据没有超过Access表中字段的限制。例如,如果Excel中有某些文本字段的字符数超过了Access表中字段的允许值,可能会导致错误。

  4. 确保数据库文件(Database1.accdb)没有损坏。可以尝试打开数据库文件并进行修复,或者创建一个新的数据库文件并尝试导入数据。

  5. 尝试重新安装Excel和Access以确保没有缺少的引用或组件。

如果上述方法都没有解决问题,建议使用更详细的错误处理方式进行调试,以了解具体的错误原因。可以尝试使用以下代码来获取更详细的错误信息:

On Error Resume Next
conn.execute "insert into 表1 select * from [Excel 12.0; database = " & thisworkbook.name & "].[Sheet1$]"
If Err.Number <> 0 Then
    MsgBox "Error: " & Err.Description
    Err.Clear
End If
On Error GoTo 0

这样可以在发生错误时弹出一个消息框,显示具体的错误描述。希望这些信息对您有所帮助!