Word VBA中的嵌套IF字段

Word VBA中的嵌套IF字段,vba,ms-word,mergefield,Vba,Ms Word,Mergefield,我正在尝试创建一个word addin,它从可能的合并字段列表中添加复杂的IF语句创建 复杂是 {IF{=OR({COMPARE{MERGEFIELD Field_1}=“Value”}}=1“真指令”“假指令”} 我试图在VBA中完成这一切,但我的复杂if有问题,因为我无法使“}”在正确的位置结束 如果在端点以外的任何其他位置使用终止符“Selection.EndKey Unit:=wdLine”,则会造成混乱,并将所有}放在该行 这是我的密码: Selection.Fields.Add Ra

我正在尝试创建一个word addin,它从可能的合并字段列表中添加复杂的IF语句创建

复杂是

{IF{=OR({COMPARE{MERGEFIELD Field_1}=“Value”}}=1“真指令”“假指令”}

我试图在VBA中完成这一切,但我的复杂if有问题,因为我无法使“}”在正确的位置结束

如果在端点以外的任何其他位置使用终止符“Selection.EndKey Unit:=wdLine”,则会造成混乱,并将所有}放在该行

这是我的密码:

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="IF "


Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
    Selection.TypeText Text:=" = " & JointOperator1 & " ( "

'FIRST ARG
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
    Selection.TypeText Text:="COMPARE "


Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False, Text:="MERGEFIELD " & FirstArg1

    Selection.TypeText Text:=" "
    Selection.TypeText Text:=ComparisonType1
    Selection.TypeText Text:=" "
    Selection.TypeText Text:=Chr(34) & SecondArg1 & Chr(34)


Selection.TypeText Text:=", "


'SECOND ARG
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
    Selection.TypeText Text:="COMPARE "


Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False, Text:="MERGEFIELD " & FirstArg2

    Selection.TypeText Text:=" "
    Selection.TypeText Text:=ComparisonType2
    Selection.TypeText Text:=" "
    Selection.TypeText Text:=Chr(34) & SecondArg2 & Chr(34)


Selection.TypeText Text:=" ) "

Selection.TypeText Text:=" = 1 "

Selection.TypeText Text:=vbCrLf & " " & Chr(34)


Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=strTempIfTrue


Selection.TypeText Text:=Chr(34) & " " & vbCrLf
Selection.TypeText Text:=" " & Chr(34)

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=strTempIfFalse


Selection.TypeText Text:=Chr(34)
Selection.EndKey Unit:=wdLine
Selection.TypeParagraph
这就是我在生成“复杂if”时得到的结果

但应该是这样的:

{IF { = AND ( {COMPARE{MERGEFIELD FHB} = "T" **}** , { COMPARE {MERGEFIELD BLAH} = "F" **}** ) **}**  = 1 "If True text" "If False Text"}
如果有人能解释这件事,我错在哪里。 或者,如果有一种方法可以强制确定结尾}的位置,那就太好了
我对VBA(我是C++程序员)

非常新,所以我找到了解决问题的办法。 我使用单词macro recorder(查看>宏>录制宏…)记录我输入复杂的if语句,然后按Alt+F11并选择宏查看宏,我只是用变量替换了一些字符串。 这就解决了问题

希望这会对其他人有所帮助,节省他们几个小时的挠头时间

我不知道您可以将这些操作记录下来,以便稍后进行审查。你每天都能学到新东西

这就是录音的样子

Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="IF "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=" = AND ("
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=" COMPARE "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="MERGEFIELD FHB"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" = """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="T"
Selection.MoveRight Unit:=wdCharacter, Count:=3
Selection.TypeText Text:=", "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="COMPARE "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="MERGEFIELD Other"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" <> """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="T"
Selection.MoveRight Unit:=wdCharacter, Count:=3
Selection.TypeText Text:=")"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" = 1 """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="IfTrue"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="IfFalse"
Selection.Fields.Add范围:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“如果”
Selection.Fields.Add Range:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“=和(”
Selection.Fields.Add Range:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“比较”
Selection.Fields.Add Range:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“合并字段FHB”
Selection.MoveRight单位:=wdCharacter,计数:=2
Selection.TypeText文本:=“=”“”
Selection.MoveLeft单位:=wdCharacter,计数:=1
Selection.TypeText文本:=“T”
Selection.MoveRight单位:=wdCharacter,计数:=3
Selection.TypeText文本:=“,”
Selection.Fields.Add Range:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“比较”
Selection.Fields.Add Range:=Selection.Range,类型:=wdFieldEmpty_
保留格式:=False
Selection.TypeText文本:=“合并字段其他”
Selection.MoveRight单位:=wdCharacter,计数:=2
Selection.TypeText文本:=““””
Selection.MoveLeft单位:=wdCharacter,计数:=1
Selection.TypeText文本:=“T”
Selection.MoveRight单位:=wdCharacter,计数:=3
Selection.TypeText文本:=“”“
Selection.MoveRight单位:=wdCharacter,计数:=2
Selection.TypeText文本:==1“”
Selection.MoveLeft单位:=wdCharacter,计数:=1
Selection.TypeText文本:=“IfTrue”
Selection.MoveRight单位:=wdCharacter,计数:=1
Selection.TypeText文本:=““””
Selection.MoveLeft单位:=wdCharacter,计数:=1
Selection.TypeText文本:=“IfFalse”
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="IF "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=" = AND ("
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:=" COMPARE "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="MERGEFIELD FHB"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" = """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="T"
Selection.MoveRight Unit:=wdCharacter, Count:=3
Selection.TypeText Text:=", "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="COMPARE "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, _
    PreserveFormatting:=False
Selection.TypeText Text:="MERGEFIELD Other"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" <> """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="T"
Selection.MoveRight Unit:=wdCharacter, Count:=3
Selection.TypeText Text:=")"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" = 1 """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="IfTrue"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.TypeText Text:=" """""
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.TypeText Text:="IfFalse"