我需要在VBA中执行此excel语句
IF(AND(X2="FMS",O2>=0),1,0)
这就是我在VBA中调用sub的方式,我传递了变量“FMS”
Call passFunction("FMS")
Sub的声明如下
Sub passFunction(var As Variant)
Worksheets("Sheet1").range("A1").FormulaR1C1 = "=IF(AND(X2=" & var & ",O2>=0),1,0)"
End Sub
然而,在执行函数之后,这是我在Excel中得到的输出
IF(AND(X2=FMS,O2>=0),1,0)
请注意变量FMS
缺少引号答案 0 :(得分:2)
您实际上没有传递引号,您正在使用字符串并传入:FMS
Escaping quotes in a string in VB6
您可以使用“”将引号插入字符串中,例如:(来自链接)
dim sometext as String = "Hello ""Frank"" how are you?"
所以你想要:
Call passFunction("""FMS""")
或者您更改passFunction以在其中添加引号:
Sub passFunction(var As Variant)
Worksheets("Sheet1").range("A1").FormulaR1C1 = "IF(AND(X2=""" & var & """,O2>=0),1,0)"
End Sub
答案 1 :(得分:2)
尝试
wksheet.range("A1").Formula =
"=IF(AND(X2=" & Chr(34) & var & Chr(34) & "," & Range("O2").Address & ">=0),1,0)"
<强>更新强>
如果var可以是Integer
,那么从这一行开始
var = IIf(VarType(var) = vbString, Chr(34) & CStr(var) & Chr(34), CLng(var))
并将上述行修改为
wksheet.range("A1").Formula =
"=IF(AND(X2=" & var & "," & Range("O2").Address & ">=0),1,0)"
如果我们想要与整数进行比较,这将有效。如果我们想要抛出一个错误,如果它是一个整数,那么我们可以做
var = IIf(VarType(var) = vbString, CVErr, CLng(var))
如果它可以是整数以外的任何其他东西,那么我们将其概括为
Select Case VarType(var)
case vbString
var=Chr(34) & CStr(var) & Chr(34)
case vbLong, vbInteger
var=CLng(var) ' Or CVErr depending on what we want to do
case else
var=CVErr
End Select
在公式之前。
备注:强>
var
成为N/A
并会抛出错误Integer
中的VBA
类型也会内部投放到Long
。因此,最好先使用Long
。答案 2 :(得分:1)
你PassFunction
应该是
Sub PassFunction(var As String)
Sheets("Sheet1").Range("A1").Formula = "=IF(AND(X2=""" & var & """,O2>=0),1,0)"
End Sub
从=
之前删除If
,除非您不希望计算它。
您可以通过用另一个双引号括起引号来转义字符串中的双引号。
另外,如果要传递字符串变量而不是将参数类型更改为String
。字符串比Variant更快。