通过ADO&SQL将数据插入到其他xls工作簿 – 数据types错误

我正在构build一个非常复杂的用户窗体,它使用ADO连接来连接到另一个用作数据库的Excel工作簿,并通过SQL查询来检索和插入数据。 请注意,在这种情况下,我不允许使用Access。

我已经想出了如何使用SELECT,但有一个特定的错误INSERT我无法解决。 这让我很困扰,我已经做了很多工作。

首先是连接(我使用JET检索数据和ACE来保存数据,因为我无法让JET工作):

Public Sub InsertDataToSheet(SQLCmd As String) Dim cnx As Object Set cnx = CreateObject("ADODB.Connection") cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & ThisWorkbook.Path & "\Database.xls'; Extended Properties=Excel 12.0;" cnx.Execute SQLCmd cnx.Close End Sub 

然后有一个子程序链接到一个提交button,实际上生成的查询,因为我需要保存只填写文本框和组合,以避免空值:

 Private Sub SaveRecord() Dim SQL As String SQL = "INSERT INTO [Report$A2:AM50000] (" Dim i As Control For Each i In Me.controls If TypeName(i) = "TextBox" Or TypeName(i) = "ComboBox" Then If i <> e Then SQL = SQL & i.Name & "," End If Next i SQL = Mid(SQL, 1, Len(SQL) - 1) & ") VALUES(" ' Remove last space & comma Dim j As Control For Each j In Me.controls If TypeName(j) = "TextBox" Or TypeName(j) = "ComboBox" Then If j <> e Then If j = "Unknown" Then MsgBox "Fire" Select Case IsNumeric(j) Case False SQL = SQL & "'" & j & "'" ' Add single quotes around strings Case True SQL = SQL & j End Select SQL = SQL & "," End If End If Next j SQL = Mid(SQL, 1, Len(SQL) - 1) & ")" ' Remove last comma ' Connect InsertDataToSheet (SQL) End Sub 

在表单中有两个特定的文本框完全相同。 通常情况下,用户input数字,一切节省(不要介意'+'button):

在这里输入图像说明

然而,有时用户不知道这些值,却不能将这些值留空。 这是他们应该勾选checkbox设置为“未知”的值:

在这里输入图像说明 现在有趣的部分 – 批量字段,它可以很好地保存。 但是,当我将货运ID设置为“未知”(或任何其他string)时,会引发错误:

在这里输入图像说明

请注意,这些字段并非已禁用,只是locking了一些外观更改。 我也无法find关于错误的任何具体细节,但似乎有一些问题与查询:

在这里输入图像说明

(它表示“expression式中不兼容的数据types”)。 生成的查询是这样的:

在这里输入图像说明

任何想法出了什么问题? 我非常想保持已知的function,解决错误,而不是重新devise它,因为它已经花了一些功夫,而且这些字段不能留空。

从来没有在xls工作簿中使用SQL,但我已经与SQL服务器的这个问题了。 您的查询没有什么“错误”,问题是您要插入的表的字段上接受的数据types。 尝试将该字段使用文本值而不是数字,它应该工作。