2016-12-17 68 views
-1

我是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 

回答

0

必须使用CHR(13)代替vbCrLf

此外:

Me.cbxShipFrom.ListIndex(0) 

不是有效的表达,因为ListIndex属性返回一个整数,而不是一个数组

你最有可能想用:

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 
+0

这真是棒极了!我也不知道有关声明,我可以看到它可能会压缩重复的代码。谢谢! – Christopher

+0

不客气。你说得对,因为它避免了多次访问被引用对象的内存,这也增加了代码的性能 – user3598756

相关问题