在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$]" 这句会报错如下:
更奇怪的是,这句代码前一天完全可以正常运行没有问题,一天之后再运行就报错了,中间没有动过。
求指教是什么问题。感谢!
引用 皆我百晓生 小程序回复内容作答:
这个错误通常是由于出现了不兼容的数据类型或格式引起的。可以尝试以下解决方法:
检查Access数据库中的数据类型和Excel中的数据类型是否匹配。例如,确保目标表(“表1”)中的字段数据类型与Excel数据匹配。
检查Excel中数据是否有空值或其他不兼容的数据引起的错误。可以尝试删除表格中的所有空值,并确保所有数据与目标表的数据类型一致。
确保数据没有超过Access表中字段的限制。例如,如果Excel中有某些文本字段的字符数超过了Access表中字段的允许值,可能会导致错误。
确保数据库文件(Database1.accdb)没有损坏。可以尝试打开数据库文件并进行修复,或者创建一个新的数据库文件并尝试导入数据。
尝试重新安装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
这样可以在发生错误时弹出一个消息框,显示具体的错误描述。希望这些信息对您有所帮助!