在 VBA if 语句中,通过变量插入语句的一部分
In a VBA if-statement, insert part of the statement through a variable
在 VBA 中(在 MS Access 项目中)我想定义一个 if 语句,其中语句的一部分存储在一个变量中。
为了说明我的问题,这里有一个简单的例子:
Sub Test_String_Insertion_Into_IfStatement()
Dim strInsert As String
strInsert = "10 > 5" ' Or any other stuff that would return "TRUE"
If "" & "'"strInsert"'" & "" Then
Debug.Print "Hurray, it works!"
Else
Debug.Print "Sorry, my friend. Try something else..."
End If
End Sub
现在,问题是,这不起作用。我想,诀窍是找到与符号、引号、撇号、and/or Chr(34).
的正确组合
我做了很多实验,测试了我能想到的所有变体,但到目前为止我还没有找到有效的组合。我测试的大部分内容 returns 都是 "Type mismatch" 错误。
现实世界的应用...
上面的例子相当简单。在我的实际任务中,我想插入一个更长的字符串作为 if 语句的一部分。这是我真实世界中的一个 if 语句,它最终将被使用变量插入语句的大部分的东西所取代(这是:除了正确的 "If" 和 "Then" 之外的所有内容):
If oRs.Fields(strTitField) Like "*" & arrWCs(r).varTERM1 & "*" Then
它使用记录集的字段和用户定义的变量类型(数组)。
请注意,我要插入变量的 if 语句部分 本身有引号和符号 ! (现实世界的 if 语句已被证明有效。但现在我想使用变量将其插入到我的 if 语句中。)
目的是,使用变量插入我可以非常快速地在多个 if 语句之间切换,具体取决于整个函数的需要。)
为方便起见,我添加了一个在 if 语句中使用 & 号和引号的简单示例:
Sub Test_String_Insertion_Into_IfStatement_2()
Dim strIfClause As String
Dim strXYZ As String
strXYZ = "ouse"
strInsert = "'Mouse' Like '*' & strXYZ & '*'" ' Just a guess, doesn't work
If "" & """strInsert""" & "" Then
'The resulting if-statement should be:
'If "Mouse" Like "*" & strXYZ & "*" Then '(Taken as such, this works!)
Debug.Print "Good!"
Else
Debug.Print "Not good!"
End If
End Sub
最后我找到了以下解决方案。正如专家贡献者所建议的那样,它使用 Eval() 方法。
Dim strTest As String
strTest = "'" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM1 & "*' And '" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM2 & "*' And '" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM3 & "*'"
If Eval(strTest) Then
'Do something
End If
- oRs 是一个记录集,基于 Access 中的 tables 之一
数据库。
- arrudtWCs(r) 是一个用户定义类型的数组,有元素
varTERM1、varTERM2、varTERM3 等等。
- strTitField 是一个字符串变量,其中包含要使用的 table 字段的名称。变量不能在这里声明,因为它是调用过程时过程参数的一部分。
Eval(strTest) 评估 strTest 字符串中定义的(一系列)条件,即具体地说,它将 arrudtWCs 数组中的值与记录集的活动行中的字段值进行比较,如果发现满足条件,将采取一些进一步的行动。
主要问题是找到正确使用撇号、引号和符号的方法。
在 VBA 中(在 MS Access 项目中)我想定义一个 if 语句,其中语句的一部分存储在一个变量中。
为了说明我的问题,这里有一个简单的例子:
Sub Test_String_Insertion_Into_IfStatement()
Dim strInsert As String
strInsert = "10 > 5" ' Or any other stuff that would return "TRUE"
If "" & "'"strInsert"'" & "" Then
Debug.Print "Hurray, it works!"
Else
Debug.Print "Sorry, my friend. Try something else..."
End If
End Sub
现在,问题是,这不起作用。我想,诀窍是找到与符号、引号、撇号、and/or Chr(34).
的正确组合我做了很多实验,测试了我能想到的所有变体,但到目前为止我还没有找到有效的组合。我测试的大部分内容 returns 都是 "Type mismatch" 错误。
现实世界的应用...
上面的例子相当简单。在我的实际任务中,我想插入一个更长的字符串作为 if 语句的一部分。这是我真实世界中的一个 if 语句,它最终将被使用变量插入语句的大部分的东西所取代(这是:除了正确的 "If" 和 "Then" 之外的所有内容):
If oRs.Fields(strTitField) Like "*" & arrWCs(r).varTERM1 & "*" Then
它使用记录集的字段和用户定义的变量类型(数组)。
请注意,我要插入变量的 if 语句部分 本身有引号和符号 ! (现实世界的 if 语句已被证明有效。但现在我想使用变量将其插入到我的 if 语句中。)
目的是,使用变量插入我可以非常快速地在多个 if 语句之间切换,具体取决于整个函数的需要。)
为方便起见,我添加了一个在 if 语句中使用 & 号和引号的简单示例:
Sub Test_String_Insertion_Into_IfStatement_2()
Dim strIfClause As String
Dim strXYZ As String
strXYZ = "ouse"
strInsert = "'Mouse' Like '*' & strXYZ & '*'" ' Just a guess, doesn't work
If "" & """strInsert""" & "" Then
'The resulting if-statement should be:
'If "Mouse" Like "*" & strXYZ & "*" Then '(Taken as such, this works!)
Debug.Print "Good!"
Else
Debug.Print "Not good!"
End If
End Sub
最后我找到了以下解决方案。正如专家贡献者所建议的那样,它使用 Eval() 方法。
Dim strTest As String
strTest = "'" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM1 & "*' And '" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM2 & "*' And '" & oRs.Fields(strTitField).value & "' Like '*" & arrudtWCs(r).varTERM3 & "*'"
If Eval(strTest) Then
'Do something
End If
- oRs 是一个记录集,基于 Access 中的 tables 之一 数据库。
- arrudtWCs(r) 是一个用户定义类型的数组,有元素 varTERM1、varTERM2、varTERM3 等等。
- strTitField 是一个字符串变量,其中包含要使用的 table 字段的名称。变量不能在这里声明,因为它是调用过程时过程参数的一部分。
Eval(strTest) 评估 strTest 字符串中定义的(一系列)条件,即具体地说,它将 arrudtWCs 数组中的值与记录集的活动行中的字段值进行比较,如果发现满足条件,将采取一些进一步的行动。
主要问题是找到正确使用撇号、引号和符号的方法。