在VBA中使用If

时间:2013-07-31 10:48:54

标签: vba excel-vba access-vba excel

在我的VBA代码的一部分中,我需要将数据从excel导入到访问。现在,输入对于外来类型(字符串,整数)是“有效”的。但是,在excel文件中,我有一些字符串需要在我的访问表中转换为boolean。字符串只能使用2个值“oui”或“non”(法语是或否)。 在我的vba代码中,我有以下几行:

cSQL = "INSERT INTO " & strTable & " ( [N_CLIENT], [NOM_CLI], ) VALUES (" & Chr(34) & .Range("A" & i) & Chr(34) & "," & Chr(34) & .Range("F" & i) & Chr(34) & ");"

                DoCmd.RunSQL cSQL

我想知道我是否可以使用if条件来检查cSQL调用中的值本身并将其替换为true或false。如下所示。

cSQL = "INSERT INTO " & strTable & " ( [N_CLIENT], [NOM_CLI], ) VALUES (If(" & Chr(34) & .Range("A" & i) & Chr(34) & " = "oui") then "true" else then "false"," & Chr(34) & .Range("F" & i) & Chr(34) & ");"

                DoCmd.RunSQL cSQL

4 个答案:

答案 0 :(得分:1)

您可以在Access-SQL-Queries中使用VBA函数:

"[...] VALUES(strcomp('" & Range("A" & i) & "','oui', 1)=0 [...]"

此致

AKDA

答案 1 :(得分:1)

看起来您希望Access SQL将您的oui / non评估为true和false。您可以使用iif语句http://www.techonthenet.com/access/functions/advanced/iif.php执行此操作。但是,为什么要这么麻烦?你可以只计算vba中的范围并通过布尔变量。使用这样的东西:

dim result as boolean
if sheet1.Range("A" & i) = "oui" then
    result = true
else
    result = false
end if

然后将其插入到SQL中:

cSQL = "INSERT INTO " & strTable & " ( [N_CLIENT], [NOM_CLI], ) VALUES (If(" & Chr(34) & result & Chr(34) & , & Chr(34) & .Range("F" & i) & Chr(34) & ");"

答案 2 :(得分:1)

您还可以在SQL中使用IIF语句来检查值:

http://msdn.microsoft.com/en-us/library/hh213574.aspx

答案 3 :(得分:0)

使用撇号而不是Chr(34)更容易,并且使用行继续符'_'在行之间拆分语句有助于读取语句。 IIf()函数也用于以下内容。

另请注意,在[NOM_CLI]这个词不应该出现之后你还有一个额外的逗号。

    cSQL = "INSERT INTO " & strTable & "( [N_CLIENT], [NOM_CLI] ) VALUES ('" _
    & IIf(StrComp(.Range("A" & i), "oui", 1) = 0, "true", "false") _
    & "','" & .Range("F" & i) & "');"

这会产生如下字符串:

INSERT INTO ( [N_CLIENT], [NOM_CLI] ) VALUES ('true','hello');

使用布尔值(0,-1)更改为:

    cSQL = "INSERT INTO " & strTable & "( [N_CLIENT], [NOM_CLI] ) VALUES (" _
    & IIf(StrComp(.Range("A" & i), "oui", 1) = 0, -1, 0) _
    & ",'" & .Range("F" & i) & "');"

产生

INSERT INTO ( [N_CLIENT], [NOM_CLI] ) VALUES (-1,'hello');