Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA查询中存在多个null_Vba_Excel_Ms Access - Fatal编程技术网

VBA查询中存在多个null

VBA查询中存在多个null,vba,excel,ms-access,Vba,Excel,Ms Access,我使用MS Access作为后端,并插入excel中的值以尝试处理空白 sSQL = "Insert into " & Cells(1, 1) & " VALUES ( '" & CStr(Cells(r, 53)) & "',' " & CStr(Cells(r, 54)) & "', '" & IIF(Isnull(Cells(r,55), "NULL",Cint(Cells(r,55)) & "',' " & CIn

我使用MS Access作为后端,并插入excel中的值以尝试处理空白

sSQL = "Insert into " & Cells(1, 1) & " VALUES ( '" &  CStr(Cells(r, 53)) & "',' " & CStr(Cells(r, 54)) & "', '" & IIF(Isnull(Cells(r,55), "NULL",Cint(Cells(r,55)) & "',' " & CInt(Cells(r, 56)) & "',' " & CInt(Cells(r, 57)) & "',' " & CInt(Cells(r, 58)) & "','" & CInt(Cells(r, 59)) & "',' " & CInt(Cells(r, 60)) & "',' " & CInt(Cells(r, 61)) & "')"
对于
IIF(Isnull(Cells(r,55),“NULL”,Cint(Cells(r,55))
如果单元格为空,则应在查询中返回NULL,但在运行查询时不显示NULL

Insert into Test VALUES ( 'MODULE:','   Test','' ,' 0',' 0',' 0','0',' 0',' 0')

我怎么能在那里得到空值。宏在插入时抛出了一个错误,因为它没有任何值。

首先,您可能应该考虑使用
ADO
DAO
OpenRecordSet()
直接在数据库中插入数据,而不是手工构建SQL。它会更加健壮

但是,在您的例子中,您的
iif()
不起作用,可能是因为:

单元格(c,r)
默认属性
是一个
变量
,如果单元格不包含任何内容,则返回
。它不会返回

因此,您应该使用
IsEmpty()
而不是
IsNull()


您还可以使用这个简短的语句来确保空单元格的测试在各种情况下都能正常工作。

首先,您可能应该考虑使用
ADO
DAO
OpenRecordSet()
直接在数据库中插入数据,而不是手工构建SQL。它会更加健壮

sSQL = "Insert into " & Cells(1, 1) & " VALUES ( '" & CStr(Cells(r, 53)) & "',' " & CStr(Cells(r, 54)) & "', " & IIf(IsBlank(Cells(r, 55)), "Null", CStr(Cells(r, 55))) & ",' " & CInt(Cells(r, 56)) & "',' " & CInt(Cells(r, 57)) & "',' " & CInt(Cells(r, 58)) & "','" & CInt(Cells(r, 59)) & "',' " & CInt(Cells(r, 60)) & "',' " & CInt(Cells(r, 61)) & "')"
但是,在您的例子中,您的
iif()
不起作用,可能是因为:

单元格(c,r)
默认属性
是一个
变量
,如果单元格不包含任何内容,则返回
。它不会返回

因此,您应该使用
IsEmpty()
而不是
IsNull()

您还可以使用此简短语句来确保空单元格的测试在各种情况下都能正常工作

sSQL = "Insert into " & Cells(1, 1) & " VALUES ( '" & CStr(Cells(r, 53)) & "',' " & CStr(Cells(r, 54)) & "', " & IIf(IsBlank(Cells(r, 55)), "Null", CStr(Cells(r, 55))) & ",' " & CInt(Cells(r, 56)) & "',' " & CInt(Cells(r, 57)) & "',' " & CInt(Cells(r, 58)) & "','" & CInt(Cells(r, 59)) & "',' " & CInt(Cells(r, 60)) & "',' " & CInt(Cells(r, 61)) & "')"
通过使用上述查询和IsBlank函数,可以在查询中获得NULL


通过使用上面的查询和IsBlank函数,可以在查询中获得空值。

我刚刚尝试使用Excel模块中的
ADODB.Command
参数查询,它似乎也能工作:

选项显式
子访问插入()
Dim con作为ADODB.Connection,cmd作为ADODB.Command
Set con=New ADODB.Connection
未结_
“Provider=Microsoft.ACE.OLEDB.12.0;”_
“数据源=C:\Users\Public\Database1.accdb;”
Set cmd=New ADODB.Command
cmd.ActiveConnection=con
cmd.CommandText=_
“插入[”&单元格(1,1)&“]”和_
“(名字、姓氏、出生日期)&_
“值(?,?)”
cmd.Parameters.Append cmd.CreateParameter(“?”,adVarWChar,adParamInput,255)
cmd.Parameters.Append cmd.CreateParameter(“?”,adVarWChar,adParamInput,255)
cmd.Parameters.Append cmd.CreateParameter(“?”,adDate,adParamInput)
cmd.Parameters(0).Value=IIf(IsEmpty(单元格(3,1)),Null,单元格(3,1))
cmd.Parameters(1).Value=IIf(IsEmpty(单元格(3,2)),Null,单元格(3,2))
cmd.Parameters(2).Value=IIf(IsEmpty(单元格(3,3)),Null,单元格(3,3))
cmd.Execute
Set cmd=Nothing
结案
设置con=Nothing
端接头

我刚刚尝试使用Excel模块中的
ADODB.Command
参数查询,它似乎也能工作:

选项显式
子访问插入()
Dim con作为ADODB.Connection,cmd作为ADODB.Command
Set con=New ADODB.Connection
未结_
“Provider=Microsoft.ACE.OLEDB.12.0;”_
“数据源=C:\Users\Public\Database1.accdb;”
Set cmd=New ADODB.Command
cmd.ActiveConnection=con
cmd.CommandText=_
“插入[”&单元格(1,1)&“]”和_
“(名字、姓氏、出生日期)&_
“值(?,?)”
cmd.Parameters.Append cmd.CreateParameter(“?”,adVarWChar,adParamInput,255)
cmd.Parameters.Append cmd.CreateParameter(“?”,adVarWChar,adParamInput,255)
cmd.Parameters.Append cmd.CreateParameter(“?”,adDate,adParamInput)
cmd.Parameters(0).Value=IIf(IsEmpty(单元格(3,1)),Null,单元格(3,1))
cmd.Parameters(1).Value=IIf(IsEmpty(单元格(3,2)),Null,单元格(3,2))
cmd.Parameters(2).Value=IIf(IsEmpty(单元格(3,3)),Null,单元格(3,3))
cmd.Execute
Set cmd=Nothing
结案
设置con=Nothing
端接头