Vba 根据文档中的书签更改组合框选择

Vba 根据文档中的书签更改组合框选择,vba,combobox,ms-word,bookmarks,Vba,Combobox,Ms Word,Bookmarks,我是vba新手,一直在为我的Word文档编写用户表单。我试图让某个组合框根据文档本身中书签的文本选择其中一项。我使用if语句检查书签的文本,如果匹配,它应该将组合框的选定项更改为我选择的项。我对vba知之甚少,我很难让它工作。我不确定我错在哪里。这是我的密码 Private Sub UserForm_Initialize() Me.cbxShipFrom.AddItem ("My Company") Me.cbxShipFrom.AddItem ("Warehouse")

我是vba新手,一直在为我的Word文档编写用户表单。我试图让某个组合框根据文档本身中书签的文本选择其中一项。我使用if语句检查书签的文本,如果匹配,它应该将组合框的选定项更改为我选择的项。我对vba知之甚少,我很难让它工作。我不确定我错在哪里。这是我的密码

Private Sub UserForm_Initialize()

    Me.cbxShipFrom.AddItem ("My Company")
    Me.cbxShipFrom.AddItem ("Warehouse")
    Me.cbxShipFrom.AddItem ("Warehouse 2")
    Me.cbxShipFrom.AddItem ("Other...")

    If ActiveDocument.Bookmarks("shipfrom").Range.Text = "MY COMPANY" & vbCrLf & "123 BEETLE ST" & vbCrLf & "MYCITY, ST xZIPx" Then
        Me.cbxShipFrom.Value = Me.cbxShipFrom.ListIndex(0)
    End If

End Sub
您必须使用
CHR(13)
而不是
vbCrLf

此外:

Me.cbxShipFrom.ListIndex(0)
不是有效的表达式,因为属性返回整数而不是数组

您很可能希望使用:

Me.cbxShipFrom.List(0)
并返回组合框列表的第一个元素

最后,您可能需要对代码进行以下小重构:

Private Sub UserForm_Initialize()
    With Me.cbxShipFrom
        .AddItem ("My Company")
        .AddItem ("Warehouse")
        .AddItem ("Warehouse 2")
        .AddItem ("Other...")
        If ActiveDocument.Bookmarks("shipfrom").Range.Text = "MY COMPANY" & Chr(13) & "123 BEETLE ST" & Chr(13) & "MYCITY, ST xZIPx" Then
            .Value = .List(0)
        End If
    End With
End Sub

这很有效!我也不知道with语句,我可以看到它有可能压缩重复代码。谢谢不客气。关于With语句,您是对的,这也提高了代码性能,因为它避免了对引用对象的多次内存访问